Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/neo4j/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python属性是否已损坏?_Python_Properties - Fatal编程技术网

Python属性是否已损坏?

Python属性是否已损坏?,python,properties,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

这个测试用例怎么可能

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(对象)


如果您感兴趣,请提供一些详细信息。新型课程在几个方面都更好。

谢谢迈克。太快了。我刚才在这里也偶然发现了相同的答案:重复:这是一个合理的批评,当您尝试使用
属性
但忘记了新样式的类/必须继承自
对象
时,错误消息很糟糕。我可以抓住这个。