python3中的重写属性
在下面的代码中,test()方法self.name为None。我希望它是“B-Stack”。我错过什么了吗python3中的重写属性,python,python-3.x,Python,Python 3.x,在下面的代码中,test()方法self.name为None。我希望它是“B-Stack”。我错过什么了吗 class A: def __init__(self): self.__name = None @property def name(self): return self.__name @name.setter def name(self, value): self.__name = "A
class A:
def __init__(self):
self.__name = None
@property
def name(self):
return self.__name
@name.setter
def name(self, value):
self.__name = "A- " + value
class B(A):
@A.name.setter
def name(self, value):
self.__name = "B- " + value
def test(self):
print(self.name) # It should print B- Stack
b = B()
b.name = "Stack"
b.test()
您正在打印
self.name
,这是setter方法,而不是实际的self.\u name
您可以在测试方法中添加getter方法或打印(self.\u name):
可以在B()中添加getter方法
也许问题在于双下划线字段没有被继承。尝试将
\uu
添加到变量的末尾,例如self.\uu name.\u
。在这种情况下,字段变为受保护
而不是私有
打印(self.\uu name)工作,@name.getter引发错误“未解析名称引用”
@name.getter
def name(self):
return self.__name