python - Python 属性是否损坏?

标签 python properties

怎么会是这个测试用例

import unittest

class PropTest(unittest.TestCase):
    def test(self):
        class C():
            val = 'initial val'

            def get_p(self):
                return self.val

            def set_p(self, prop):
                if prop == 'legal val':
                    self.val = prop

            prop=property(fget=get_p, fset=set_p)

        c=C()
        self.assertEqual('initial val', c.prop)

        c.prop='legal val'
        self.assertEqual('legal val', c.prop)

        c.prop='illegal val'
        self.assertNotEqual('illegal val', c.prop)

失败如下?

Failure
Traceback (most recent call last):
  File "/System/Library/Frameworks/Python.framework/Versions/2.6/lib/python2.6/unittest.py", line 279, in run
    testMethod()
  File "/Users/jacob/aau/admissions_proj/admissions/plain_old_unit_tests.py", line 24, in test
    self.assertNotEqual('illegal val', c.prop)
  File "/System/Library/Frameworks/Python.framework/Versions/2.6/lib/python2.6/unittest.py", line 358, in failIfEqual
    (msg or '%r == %r' % (first, second))
AssertionError: 'illegal val' == 'illegal val'

最佳答案

您的类 C 没有继承自 object 或任何其他新式类,因此它是一个旧式类(因此不支持属性)。描述符仅适用于新型类。要修复,请将 class C() 更改为 class C(object)

http://www.python.org/download/releases/2.2.3/descrintro/如果您有兴趣,请提供一些详细信息。新型类(class)在几个方面更好。

关于python - Python 属性是否损坏?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2459715/

相关文章:

python - 使用单行从字符串python中过滤掉数字

Excel 表单控件没有属性

用于创建图像镜像并将其与一定量的白色混合的 Python 代码。

python - pytest属性错误: Metafunc instance has no attribute 'parameterize'

python - 在 NumPy 数组的每一行(按行)应用函数

c# - 将基类属性重写为派生类型并通过基类访问

Objective-C 类别 : Can I add a property for a method not in my category?

c# - 限制引用实体的 NHibernate 查询

visual-studio-2008 - VS2008:解决方案的“启动项目”设置存储在哪里?

python - 字符串索引超出范围 - 索引错误