为什么我的 python 2.7 getter 表现得像 setter?

Why is my python 2.7 getter acting like a setter?

出于某种原因,我有一个 class 和一个 python getter 表现得像 setter...我不知道为什么会这样。如果有人可以帮助我,那将非常感谢。 :) 这是我的代码

class Testclass():
    def __init__(self):
        self._testvar = None

    @property
    def testvar(self):
        return self._testvar

    @testvar.setter
    def testvar(self, value):
        assert False

testObj = Testclass()
testObj.testvar = "test"
print (testObj.testvar)

出于某种原因,当我 运行 它打印的程序时 "test" 但我希望它打印 "None" 或者甚至在我使用

时抛出错误
testobj.testvar = "test"

我很确定 python 的工作方式,当你这样做时:

testobj.testvar = "test"

您实际做的是用字符串 "test" 替换方法 Testclass.testvar()。本质上你是在践踏你的功能。也许你打算做

testobj._testvar = "test"

您正在动态创建一个名为 testvar 的新成员变量,并将其添加到您的 class,然后它会覆盖您的 属性 名称。

要验证这一点,您可以将分配更改为例如

testObj.testvar2 = "test"

一切都会如您所愿,显示 None 作为 testvar 的值。

object 添加为父级 class。

class Testclass(object):
    def __init__(self):
        self._testvar = None

    @property
    def testvar(self):
        return self._testvar

    @testvar.setter
    def testvar(self, value):
        self._testvar = value

testObj = Testclass()
print(testObj.testvar)
testObj.testvar = "test"
print(testObj.testvar)

>>> None
>>> test