慕的地6264312
2019-08-12 10:47:21
Python變量聲明學習python,并有一些基本的疑慮。我看過變量聲明(路徑在這里)class writer:
path = ""有時,沒有明確的聲明,但初始化__init__。def __init__(self, name):
self.name = name我理解的目的__init__,但是建議在任何其他函數中聲明變量。2.如何創建變量來保存自定義類型?class writer:
path = "" # string value
customObj = ??
3 回答

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

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