簡體   English   中英

如何從子類方法訪問超類實例的屬性

[英]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和創建循環引用之間BA (在構造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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM