2014-03-27 43 views
-1

是否有一些python規則聲明/定義「init」方法中的所有全局變量?爲什麼Python會允許這個?在python中這是不好的編碼?

例如,請看下面的代碼:

class Myclass(): 
    def __init__(self,input): 
     self.input = input 
    def a_method(self): 
     self.sneaky = {} 
     local_var = 'a var' 
     return local_var 
    def another_method(self): 
     print self.input 
     print self.sneaky, ', O sneaky you bad var' 
     return 

如果我的課有許多方法中的變量「self.sneaky」將很難被發現。並且「a_method」必須首先被調用其他明智的AttributeError在調用「another_method」時引發。我只是在某人的代碼中發現它,並想知道這是否是常見做法。

+0

可能重複http://stackoverflow.com/questions/12274179/must-all-python-實例變量被聲明在def-init) – 2014-03-27 00:36:44

+0

@Lego我反對你編輯我的第一行,你完全刪除。 – user1318806

回答

1

首先,你不是在談論全局變量,而是在談論實例變量。然後,是否在方法或構造函數中聲明變量取決於您使用的場景。

基本上,唯一的規則是在使用它之前總是聲明一個變量。 (或者你會得到AttributeError例外)。

通常,在init中聲明所有類的成員是個好主意,因此您可以使用默認值來假設它們存在。雖然,有時候您可能更願意推遲創建類的類型,以及內部元素的歸屬。

一個很好的例子是,如果在一個循環中創建了一百萬個實例,但是在給定的時間只能選擇其中的幾個。然後,您可能希望讓構造函數儘可能簡單並具有實例所需的內容,並創建一個populate()方法,在您使用它添加要使用的默認成員之前調用該方法。這種模式經常出現在構建圖形用戶界面中。

HTH

的[必須全部Python實例變量DEF聲明\ _ \ _ INIT \ _ \ _?(