Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/349.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
python3中的重写属性_Python_Python 3.x - Fatal编程技术网

python3中的重写属性

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

在下面的代码中,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- " + 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