首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Python将setter重写为没有setter的属性?

Python将setter重写为没有setter的属性?
EN

Stack Overflow用户
提问于 2014-04-25 08:16:17
回答 1查看 702关注 0票数 0

我有一个由其他人制作的类A,我不能编辑:

代码语言:javascript
复制
class A:
    def __init__(self, x):
        self.x = x

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

我已经试过了

代码语言:javascript
复制
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'

还有别的方法吗?也许有其他的方法?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2014-04-25 08:18:13

不,除了类属性之外,您不能使用super()x是一个实例属性,并且没有属性的继承机制。

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

您仍然可以到达实例__dict__对象中的属性:

代码语言:javascript
复制
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)之前对其进行查找,但仍然可以直接访问它。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/23287755

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档