[英]Why python property() function is assigned to a class variable and not an instance variable?
[英]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.