[英]Inner class usage python. Global name is not defined
class ClassWithEnum(object):
class EnumClass(object):
...
def doSomethingWithEnum(self, m = EnumClass....):
...
Python類構造作為代碼執行。 def
語句實際上是正在執行的創建函數的代碼行。 class
關鍵字引入一個名稱空間。 將這兩種機制放在一起,就意味着class EnumClass
實際上在當前名稱空間中使用該名稱創建了一個對象,與foo = 'bar'
所做的操作沒有太大區別,因此可以在同一名稱空間中使用該名稱來引用它,是def
語句中發生的事情。
還要比較:
class Foo:
bar = 'baz'
print bar
baz = bar
class
塊中的每一行代碼都是常規的可執行代碼行。
完成class
定義后,您將退出ClassWithEnum
命名空間,並且不能再僅通過該名稱訪問EnumClass
了。 現在僅以ClassWithEnum.EnumClass
; 無論是從類“外部”還是從函數內部(任何函數,包括類方法)。
要訪問該類而無需從方法中鍵入其名稱,可以執行以下操作:
type(self).EnumClass
或者只是self.EnumClass
,因為屬性是在鏈中向上查找的。
當您在doSomethingWithEnum
函數中時,您位於其他名稱空間中。 要訪問類中定義的任何內容,例如EnumClass
,應調用self.EnumClass
。 如果它是類方法, cls.EnumClass
。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.