簡體   English   中英

混淆,因為我無法弄清楚是什么改變了 python 中 class 的 object 的屬性

[英]confusion because i can't figure out what is changing the attribute of the object of a class in python

這是我的代碼`

class Cats:
    def __init__(self,name):
        self.name=name
        #print(self.name,name,"hello")
    def change_name(self,new_name):
        self.name=new_name
        return 0
        #print(new_name)

cat1=Cats("lion")
print(cat1)
print(cat1.name)


cat2=cat1.change_name("tiger")
print(cat1.name)
print(cat1)
print(cat2)

**這是 output ,附上我的評論/意見(如果我錯了,請糾正我):** <__main__.Cats object at 0x7f84272d7640>錯誤,因為我試圖打印 object cat1

lion看起來不錯,因為我打印了 object 的屬性,並且由於初始化時給出的名稱是 lion,它打印了 lion

tiger這就是我不明白的。 為什么這個 output 是老虎而不是獅子。 究竟是什么導致了這種變化? Bcoz 當我執行 <<cat2=cat1.change_name("tiger") 時,它應該只將值 0 分配給 cat2,但為什么它更改了 cat1 中的值?

<__main__.Cats object at 0x7f84272d7640>錯誤 bcoz 我試圖打印 class

0似乎很好因為 chane_name function 返回分配給 cat2 的 0

我期望 cat1.name 的值保持不變(它應該保持為 lion 而不是更改為 tiger)

當您調用cat1.change_name("tiger")時,會發生一些事情:

  1. 名稱self綁定到與 cat1 相同的cat1
  2. 結果, cat1.name"lion"更改為"tiger"
  3. change_name返回0 ,而不是Cats的新實例。

此次調用后, cat1.name計算結果為"tiger" ,而不是"lion" ,因為值已更改。

print(cat1)輸出您的“錯誤消息”,因為print在其參數上隱式調用str ,並且由於Cats未定義__str__ ,因此使用object.__str__ ,並生成您看到的字符串。

print(cat2) output 0因為這是作為cat1.change_name("tiger")的返回值分配給cat2的值。

暫無
暫無

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

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