[英]How to access attribute of superclass instance from child class method
我的代碼中具有以下類結構:
超類A,基本上是子類B中對象的列表。類A具有方法meth,該方法創建變量var(通過讀取文件)。 變量var需要由子類B的方法訪問。問題是初始化a = A()之后,var是實例a的屬性,子類方法無法使用super( )。 var是一個大的浮點數組(大約1e5個元素),所以我試圖通過不使其成為B實例的屬性(n次!)或將其顯式傳遞給methB來最小化內存使用。
class A(object):
def __init__(self,n):
self.data = [B() for _ in xrange(n)]
def __getitem__(self,n):
return self.data[n]
def methA(self):
with open('file.txt','r') as fp:
self.var = fp.readlines()
class B(A):
def __init__(self):
self.derived_var = []
def methB():
'''This method needs to use var defined in meth of A above.'''
a = A(5)
a.methA()
for b in A:
b.methB()
這可能在python中還是編碼錯誤?
首先,我不認為將B
定義為A
的子類的意義。 他們似乎並不分享functionalites和創建循環引用之間B
和A
(在構造A
),這可能會導致問題。
現在,關於您的問題。 僅將a.var
傳遞給methB
是否有問題? 像這樣:
class B(A):
def __init__(self):
self.derived_var = []
def methB(self, var):
# some code
a = A(5)
a.meth()
for b in A:
b.methB(a.var)
def methB(self):
super(B, self).meth()
print self.var
使用super()
可以幫助您獲取在超類中定義的屬性。 但是繼承應該是一對一的關系。 您的設計不好。
當函數足夠時,不要使用類:
with open('file.txt','r') as fp:
var = fp.readlines()
for _ in xrange(5):
funcB()
簡單得多。 如果您確實想使用課程,則需要向我們展示為什么需要使用課程。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.