我有一个由其他人制作的类A,我不能编辑:
class A:
def __init__(self, x):
self.x = x现在,我正在尝试从A继承我自己的类A,并将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'
还有别的方法吗?也许有其他的方法?
发布于 2014-04-25 08:18:13
不,除了类属性之外,您不能使用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)之前对其进行查找,但仍然可以直接访问它。
https://stackoverflow.com/questions/23287755
复制相似问题