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