为什么我的python 2.7 getter就像一个setter?

时间:2016-05-09 18:59:23

标签: python python-2.7 class setter getter

出于某种原因,我有一个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"但是我想要它打印"无"或者甚至在我使用

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

3 个答案:

答案 0 :(得分:0)

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

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

testObj.testvar2 = "test"

并且一切都会按预期工作,将None显示为testvar的值。

答案 1 :(得分:0)

object添加为父类。

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

答案 2 :(得分:-1)

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

testobj.testvar = "test"

你实际在做的是用字符串“test”替换方法Testclass.testvar()。基本上你是在踩你的功能。也许你打算这样做

testobj._testvar = "test"