繁体   English   中英

Python将setter覆盖为没有setter的属性?

[英]Python overriding setter to an attribute with no setter?

我有别人做的A类,我无法编辑:

class A:
    def __init__(self, x):
        self.x = x

现在,我试图从A继承我自己的类B ,并将x作为属性而不是属性。 这可能吗?

我已经尝试过:

class B(A):
    def __init__(self, x):
        super().__init__(x)

    @property
    def x(self):
        return super().x

    @x.setter
    def x(self, x):
        super().x = x
        print(x)  # my stuff goes here

但正如我预期的那样,这是不可能的: AttributeError: 'super' object has no attribute 'x'

还有其他方法,也许有些工作方法?

不可以,除类属性外,不能将super()用于其他任何东西; x实例属性,并且属性没有继承机制。

实例属性位于单个名称空间中; 没有“父实例”属性名称空间。

您仍然可以在实例__dict__对象中访问该属性:

class B(A):
    @property
    def x(self):
        return self.__dict__['x']

    @x.setter
    def x(self, x):
        self.__dict__['x'] = x
        print(x)  # my stuff goes here

属性是数据描述符 ,这意味着在查询实例属性之前先对其进行了查找(请参阅描述符howto ),但是您仍然可以直接访问它。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM