[問題]class內的參考觀念

作者: LouisFFs (願翱翔)   2018-07-21 13:25:44
嗨囉 大家好 最近小弟在自學python
有些小觀念 有點不太清楚 想請教大家
在此版第一次發文 若有違反版關 請告知 小弟自d
code:
class Account: #(1)
pass
def account(name,number,balance):
acct=Account() #(2)
acct.name=name #(3)
acct.number=number
acct.balance=balance
return acct
想請教的是在#(1)時class定義了Account物件 然後其內容pass 不撰寫
並且我們在#(2)這邊實際建立了一個object 並將acct此參考指向建立的object
上述大概沒什麼問題
但為什麼我們做像#(3)這類型的事情
明明Account內這個物件沒有定義的個任何的變數(參考) 並pass掉
我們卻可以讓acct.name ?!
小弟有摸過一點c++跟c#
已知python所有變數皆是參考
但自學python到這邊覺得有點卡卡
怕走火入魔 請大大指點 謝謝!
作者: guaptpan (Gua)   2018-07-21 14:09:00
記得python是可以在實例中額外加上屬性的,沒記錯的話XD所以等於是新增了name屬性到acct中https://i.imgur.com/w9S83pi.jpg
作者: windclara (null)   2018-07-21 17:34:00
可以直接加 記得是不太建議這麼做!
作者: james732 (好人超)   2018-07-21 20:03:00
從其他語言過來真的會覺得很不習慣,我也是這樣
作者: Yshuan (倚絃)   2018-07-21 23:49:00
可以研究 __get__這個方法
作者: adrianshum (Alien)   2018-07-23 10:45:00
我自己用的理解方法是,(先不要管slot 相關的東西),一個object 可以看成一個dict, a.foo=bar 可以看成a_internal_dict[“foo”] = bar
作者: mychiux413 (小邱)   2018-07-24 22:19:00
可以這麼做沒錯, 但建議都定義在__init__()較好讀即使未來執行某method才會獲得self.value, 也建議在__init__()時視情況先給空值self.value=None 之類的寫在class也行, 總之讓讀code第一眼就看到輪廓比較好

Links booklink

Contact Us: admin [ a t ] ucptt.com