class Bank_account():
def password(self):
return "password:123"
andy = Bank_account()
print(andy.password)
<bound method Bank_account.password of <__main__.Bank_account object at 0x0000012C834FF520>>
class Bank_account():
def password(self):
return "password:123"
andy = Bank_account()
print(andy.password())
password:123
我的理解是
不加括號是去查看該物件綁定的方法
加括號是去查看該物件的方法內容
想請問各位大大們,我的理解是否有誤,煩請指正
class Bank_account():
@property
def password(self):
return "password:123"
andy = Bank_account()
print(andy.password)
andy.password = "password:456"
print(andy.password)
password:123
Traceback (most recent call last):File "D:/, line 9, in <module> andy.password = "password:456" AttributeError: can't set attribute
print(andy.password())
則出現如下錯誤
Traceback (most recent call last):File "D:/", line 7, in <module>
print(andy.password()) TypeError: 'str' object is not callable
想請教為何遇到@property後,就不加括號;表示在讀取屬性時僅能查看?!
再請大大們指正了~
謝謝
加括號就是執行,不加就是本身
def testfun():
return "test"
print(testfun)
print(testfun())
# class的話,加括號就是執行 __init__
# 你把class想成設計圖,沒加括號是設計圖,加了括號是照著設計圖做出的實物
# 做出的實物在程式設計術語中叫 實例(instance)
class TestCls():
def __init__(self):
self.v = "test"
print(TestCls)
print(TestCls().v)
然後 @property 裝飾子是語法糖
只是讓語意清楚一點。
property翻譯過來叫屬性,是一個唯讀的值,不會讓你做賦值的動作,所以這個裝飾子就幫你綁定,只要呼叫這個屬性就不用畫蛇添足加後面的括號,直接傳回值。
類似java中getter的東西...