[英]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.