簡體   English   中英

如何通過Python中子類的實例訪問基類變量?

[英]How do I access base class variables through an instance of a child class in Python?

我想知道如何使用子類的對象訪問超類的變量。如果有任何意義,我補充說,某些變量是以這種__variable名稱的方式定義的。 任何時候我想使用子對象訪問變量。 Python表示此處未定義類型為CHILE CLASS TYPE的對象。 我想知道如何解決這個問題? 我還想補充一點,沒有明確定義超類,它只是從模塊導入的。

class AcuExcelSheet (  Worksheet  ):  ## super class which is imported from module 
    def __init__(self):
        Worksheet.__init__(self)

sheet = AcuExcelSheet()
for row_index in range(sheet.nrows):
        for col_index in range(sheet.ncols):
            print sheet.cell(row_index,col_index).value

對於range(sheet.nrows)中的row_index:AttributeError:'AcuExcelSheet'對象沒有屬性'nrows'

我想知道此類變量調用的語法。 因為我看到屬性nrow已在Worksheet類的構造函數中定義。

出了點問題,但您顯示的代碼卻不對。 如果Worksheet確實定義了.nrows ,則您的AcuExcelSheet將可以訪問它。 有幾種可能性:

  1. Worksheet沒有定義行。 您提到了雙下划線名稱。 您確定不是__nrows嗎?
  2. Worksheet定義了nrow,但僅針對某些代碼路徑,您對構造函數的調用不會影響這些代碼路徑。

如果我誤會了什么,請原諒我,但是子類不會自動繼承超類的方法嗎? 例如:

>>> class A(object):
...     def __init__(self):
...             self.data = "GIMME TEH DATA"
... 
>>> a = A()
>>> a.data
'GIMME TEH DATA'
>>> class B(A):
...     pass
... 
>>> b = B()
>>> b.data
'GIMME TEH DATA'

因此,超類A的init方法設置了data屬性。 B是子類,並且B的實例具有自動初始化的相同data屬性。

我的意思是說這部分對我來說似乎完全沒有必要:

def __init__(self):
    Worksheet.__init__(self)

(關於其余部分,我同意評論者的意見,即您需要使用自省或查找文檔來找出Worksheet具有哪些屬性-類似於

>>> a = Worksheet()
>>> print dir(a)

。)

對象實例中沒有單獨的基類實例字典。 作為線

Worksheet.__init__(self)

說AcuExcelSheet的對象由Worksheet類初始化。 您可能需要做的所有事情-訪問已重新定義的基類方法,只需執行以下操作即可

super(AcuExcelSheet,self).method_name

表達。 因此,如果您無法在子類實例中找到某些屬性,則可能需要進行其他一些初始化。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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