2011-05-02 74 views
1

請看看這個:作用域Python中

class Car: 
    def __init__(self, bid_code): 
     self.__bid = bid_code 

    def doit(self, cry): 
     self.bid_it = cry 

    def show_bid(self): 
     print self.__bid 

    def show_it(self): 
     print self.bid_it 

a = Car("ok") 
a.show_bid() 
a.doit("good") 
a.show_it() 

什麼是bid_it這裏的範圍是什麼?我認爲這是一個局部變量,因爲它在def塊內。我可以在函數之外調用它怎麼可能?我還沒有宣佈bid_it是全球性的。

感謝

+0

使用* variable *'bid_code'的唯一時間是在構造函數中,它是參數。在所有其他情況下,*屬性*被訪問。屬性不是「作用域」的變量,雖然它們通過解析鏈運行。屬性和變量都不是對象 - 它們只能包含/引用對象。 – 2011-05-02 20:02:27

回答

5

使用self,你已經將它綁定到實例。它現在是一個實例變量。實例變量對於它們的實例是本地的。如果變量沒有綁定(沒有自身前綴),它會有函數作用域並在方法調用結束後超出作用域,但是你已經將它綁定到了其他的實例上。

+0

謝謝,現在它是有道理的。感謝所有的答案。 – steve 2011-05-02 20:13:23

+0

@steve如果他的回答真的回答了您的問題,您應該通過點擊複選標記來接受答案。它真的幫助了社區。 – 2011-05-02 20:23:59

+0

好吧,我把它變成了綠色。 – steve 2011-05-02 20:49:33

0
def doit(self, cry): 
    self.bid_it = cry 

'self'在C++中就像一個this指針,在這種情況下,它是對Car對象的引用。如果bid_it沒有在self中定義,則會立即創建並分配一個值。這意味着你可以在任何地方創建它,只要你有一個對象的引用。