2017-08-27 185 views
0

這裏是我的代碼:Python:爲什麼類變量被賦值?

class MyClass: 

    def __init__(self): 
     self.value = 0 

    def set_value(self, value): 
     self.value = 5 

    def get_value(self): 
     return self.value 

    value = print("Hello") 

a = MyClass() 

輸出是:

Hello 

我不明白的是爲什麼print("Hello")得到執行。當我創建類的實例時,只有實例變量設置爲0.爲什麼self.value = 0調用value = print("Hello")

有人能解釋我這種行爲嗎?

回答

3

代碼在執行時評估類,並調用print來定義類變量value

以下示例顯示它在實例化之前打印。

class MyClass: 

    def __init__(self): 
     self.value = 0 

    def set_value(self, value): 
     self.value = 5 

    def get_value(self): 
     return self.value 

    value = print("Hello") 

print('hi') 
a = MyClass() 

#output 
>>> Hello 
>>>hi 
2

它沒有。該印刷品因其處於課堂級別而被執行;類的主體在定義類時執行。即使您從未實例化MyClass,您也會得到該輸出。

1

它沒有,掉落a = MyClass(),反正它會打印"Hello"。當一個類被定義時,它在主體中執行代碼:

class MyClass: 
    print(2 * 2) 

# prints 4 
1

不要讓縮進欺騙你。 value不是一個實例變量。 value是一個類變量,因爲它是在類的範圍內定義的。這是一樣的做:

class MyClass: 
    value = print("Hello") 
    .... 

這意味着調用print將在類定義時運行。換句話說,當Python定義MyClass時,它還定義了所有的類級變量 - 包括value。要定義值,它會調用print,這就是爲什麼Hello在之前打印您創建MyClass的實例。

如果您只想要MyClass的實例打印Hello,請將變量定義放入類構造函數中。

旁註:print函數返回None,所以它看起來有點怪,你的分配值給一個變量。也許你正在尋找像input而不是?