2012-01-16 75 views
4

我剛剛學習python,我不確定在__init__中究竟應該發生什麼。通常我只看到人們爲每個arg寫入self.arg = argPython __init___:這是否違反約定?

我只是想完全確定自己編碼好。是否可以,如果我有這樣的事情:

def __init__(self, arg1): 
    self.arg1 = arg1 
    self.var1 = 0 
    self.var2 = 0 
    self.var3 = 0 
    self.var4 = 0 
    self.var5 = None 
    self.var6 = None 
    self.initialize_vars() 

這樣做的原因是,我需要調用一些函數來獲取這些值初始化。我不知道爲什麼,但它似乎有點錯,我還沒有看到任何類似的例子,所以我想檢查它是否可以。如果不是,我可以做些什麼呢?

另外,介紹self.var7,例如,在__init__之後的另一個函數中是不是很好?

回答

3

我想說,我同意,由於可讀性,好的樣式代碼會分配__init__中的所有實例變量,也就是說,任何查看代碼的人(甚至在幾個月內都不需要)閱讀整個類的實現,以瞭解該類的變量和實例對象。

除此之外,我會將initialize_vars方法重命名爲_initialize_vars,只是爲了清楚說明這是一個內部方法,預計不會被該類的用戶使用。

要完成上面的信息,請PEP8看看:

  • single_leading_underscore:弱 「內部使用」 的指標。
+1

你也不想得到「意外的」NameErrors。 – Gandaro 2012-01-16 20:33:08

3

這是違反公約的。如果你開始計算你的變量,你應該使用一個列表!是的,在__init__以外的地方引入新的實例變量是邪惡的。

+3

我認爲會員的名字只是(蹩腳)的例子,與問題無關。 – delnan 2012-01-16 20:31:39

1

我會initialize_vars返回變量如果可能的話,如:

def __init__(self, arg1): 
    self.arg1 = arg1 
    self.var1,self.var2,self.var3,self.var4,self.var5,self.var6=self.initialize_vars() 

def initialize_vars(self): 
    a=1 
    b=a*3 
    #balh blah 
    return(a,b,3,4,5,6) 

但是,它會更有意義把initialize_vars裏面的內容初始化豈不?除非init將會有很多其他的邏輯,你不希望它變得太大。