为什么我的 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
出于某种原因,我有一个 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