簡體   English   中英

Python:為什么要分配類變量?

[英]Python: Why does class variable get assigned?

這是我的代碼:

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")

有人可以向我解釋這種行為嗎?

沒有。 之所以執行該打印,是因為它是在類級別上進行的。 類的主體在定義類時執行。 即使您從未實例化MyClass,也將獲得該輸出。

代碼在執行時會評估該類,並調用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

不要讓縮進欺騙您。 value 不是實例變量。 value是一個類變量,因為它是在類的范圍內定義的。 與執行操作相同:

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

這意味着對print的調用將在類定義時間運行。 換句話說,當Python定義MyClass ,它還定義了所有類級別的變量-包括value 為了定義值,它隨后調用print ,這就是為什么創建MyClass實例之前先打印Hello原因。

如果只希望MyClass實例打印Hello ,則將變量定義放入類構造函數中。

旁注: print函數返回None ,因此將值分配給變量似乎有點奇怪。 也許您正在尋找類似input東西?

它不會刪除a = MyClass()並且無論如何都會顯示"Hello" 定義類后,它將在主體中執行代碼:

class MyClass:
    print(2 * 2)

# prints 4

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM