3 回答

TA貢獻(xiàn)1795條經(jīng)驗 獲得超7個贊
沒有必要在Python中聲明新變量。如果我們在談?wù)摵瘮?shù)或模塊中的變量,則不需要聲明。只需為您需要的名稱指定一個值:mymagic = "Magic"
。Python中的變量可以包含任何類型的值,但您不能限制它。
您的問題特別詢問了類,對象和實例變量。創(chuàng)建實例變量的慣用方法是在__init__
方法中而不是其他地方 - 雖然您可以在其他方法中創(chuàng)建新的實例變量,或者甚至在不相關(guān)的代碼中,但這只是一個壞主意。它會使你的代碼難以推理或維護(hù)。
例如:
class Thing(object): def __init__(self, magic): self.magic = magic
簡單?,F(xiàn)在這個類的實例有一個magic
屬性:
thingo = Thing("More magic")# thingo.magic is now "More magic"
在類的名稱空間中創(chuàng)建變量本身會導(dǎo)致不同的行為。它在功能上有所不同,只有在您有特定原因時才應(yīng)該這樣做。例如:
class Thing(object): magic = "Magic" def __init__(self): pass
現(xiàn)在嘗試:
thingo = Thing()Thing.magic = 1# thingo.magic is now 1
要么:
class Thing(object): magic = ["More", "magic"] def __init__(self): passthing1 = Thing()thing2 = Thing()thing1.magic.append("here")# thing1.magic AND thing2.magic is now ["More", "magic", "here"]
這是因為類本身的名稱空間與從其創(chuàng)建的對象的名稱空間不同。我會留給你研究一下。
帶回家的消息是,慣用的Python是(a)初始化__init__
方法中的對象屬性,(b)根據(jù)需要記錄類的行為。你不需要為你所寫的所有東西都找到完整的Sphinx級文檔的麻煩,但至少有一些關(guān)于你或其他人可能需要提取它的細(xì)節(jié)的評論。

TA貢獻(xiàn)1845條經(jīng)驗 獲得超8個贊
這可能晚了6年,但在Python 3.5及更高版本中,您聲明了一個這樣的變量類型:
variable_name: type_name
或這個:
variable_name # type: shinyType
所以在你的情況下(如果你CustomObject
定義了一個類),你可以這樣做:
customObj: CustomObject
添加回答
舉報