2013-08-23 80 views
0

屬性可以在類中的任何位置分配嗎?如果是這樣,範圍規則如何適用於以下每種情況?屬性可以在類中的任何位置分配嗎?

class GreatComposers(object): 
    def __init__(self, name, birthday, instrument): 

     # attributes assigned in __init__ 
     self.name = name 
     self.birthday = birthday 
     self.instrument = instrument 

    def setFullName(self) 

     # attributes assigned in other class methods 
     self.fullname = self.name + self.birthday 
     self.job = self.instrument + 'ist' 


    # attributes assigned outside any functions 
    self.nationality = 'german' 

回答

2

不,它不會在類範圍(self.nationality = 'german'在你的例子)的工作,因爲在此時範圍沒有名字self。而且在其他情況下它不起作用,因爲方法或self參數在某種程度上是特殊的。您可以在任何可以引用對象的地方指定屬性。這包括方法,但也包括可以訪問相關對象的所有其他代碼。

0

指定以外的自身屬性初始值違背了PEP 8,但仍可以這樣做。 self.nationality不應該工作,因爲自我沒有被定義。即使你發現了一個工作,我也不會推薦這麼做。

編輯:我的錯誤。我正在將peylint警告與pep 8風格混淆。但是,不要這樣做。

1

試試看:

composers.py

class GreatComposers(object): 
    def __init__(self, name, birthday, instrument): 

     # attributes assigned in __init__ 
     self.name = name 
     self.birthday = birthday 
     self.instrument = instrument 

    def setFullName(self): # <<< added missing colon 

     # attributes assigned in other class methods 
     self.fullname = self.name + self.birthday 
     self.job = self.instrument + 'ist' 


    # attributes assigned outside any functions 
    self.nationality = 'german' 
>>> import composers 
Traceback (most recent call last): 
    File "<stdin>", line 1, in <module> 
    File "composers.py", line 1, in <module> 
    class GreatComposers(object): 
    File "composers.py", line 17, in GreatComposers 
    self.nationality = 'german' 
NameError: name 'self' is not defined 

回溯告訴你,一個方法外,你不能分配任何東西self.nationality因爲self不存在(請記住,self只是一個參數,不像JavaScript中的this)。

裏面的方法,你可以做你喜歡什麼,PEP 8警惕定義之外__init__()實例變量,但你的代碼會更容易,如果你不遵循。

相關問題