假設您有兩個類A
和B
。類B在類A中定義。我想在內部類中訪問外部類的變量和方法。這裏的代碼是一個玩具的例子,但有什麼我想證明要領:嵌套類:從內部類訪問外部類的方法
class A:
a = 'even'
b = 'odd'
class B:
def __init__(self, n):
if n%2 == 0: self.num = a
if n%2 == 1: self.num = b
self.description = A.desc()
def __getitem__(self, i):
return self.B(i)
def desc(self):
return a + '-' + b
>>> c = A()
>>> d = c[4]
>>> TypeError: unbound method desc() must be called with A instance as first argument (got nothing instead)
這裏desc
確實在類A
的變量的一些工作,併產生輸出的方法。因爲您沒有定義description
變量,所以類A
已正確初始化,您可以訪問變量a
和b
,即使是從內部作用域也是如此。但是,我找不到調用外部作用域類方法desc
的方法。是否可以在B
中使用desc
方法而不實例化類A
?
解釋爲什麼我用這樣的模式:在我的程序 變量a
和b
是相當大的。我只需要初始化它們一次。另外,我不希望這些變量浮動在程序中,而只能被內部類訪問。除此之外,我還可以在需要時使用A.__getitem__
來提取大數據的'切片'。因此,外部類爲我提供了隱藏/封裝數據,索引操作符(通過__getitem__
)以及提取數據片所需的所有例程(這裏的方法desc
。內部類B
提供了有用信息的捆綁從每個指數的大數據來看,這很可能不是實現所描述任務的最佳設計,我很樂意聽取您對於替代模式的意見
我接受這個答案,因爲'@ classmethod'在很大程度上解決了我的問題。我將術語「封閉」改爲「嵌套」。我做了一個快速搜索,實際上這不是封閉的例子,所以謝謝!我添加了解釋爲什麼我使用這種嵌套模式。 –