推 lycantrope: x在第一個property產生了 08/17 10:33
推 a129924: 就是你要設定property的參數 例如name 那就是@name.sette 08/18 00:44
→ a129924: r 08/18 00:44
我知道,我的問題是這個x是怎麼產生的。它是怎麼實現的?
※ 編輯: tsaiminghan (101.12.18.70 臺灣), 08/19/2022 15:12:42
推 GALINE: 在 @x.setter 前一行打 print(x) 會看到他是個 08/26 12:43
→ GALINE: property object 08/26 12:43
→ GALINE: 雖然這版本應該跟 python 本身的實現差很多 08/26 12:50
→ tsaiminghan: 謝謝 08/31 16:31
我後來有想到下面。
應該就像一般的@結果一樣。class的x被取代為property obj x.
所以後面的@x.set,其寫這個x就是class中的x(已被取代為propety obj x)
所以有x.set可以用。
不要把class想成C的class,把class裡面的函式
相成函式中的local函式。
雖然不知道上面的想法有沒有問題,但是可以說的通
我也寫了一個例子
===================================
class prop(object):
def __init__(self, fget):
self.fget = fget
def set(self, fset):
self.fset = fset
return self
def __set__(self, obj, value):
self.fset(obj, value)
def __get__(self, obj, objtype=None):
return self.fget(obj)
class A(object):
@prop
def x(self):
return self._x
@x.set
def x(self, value):
self._x = value
a = A()
a.x = 1
print(a.x)
========================================
※ 編輯: tsaiminghan (49.216.55.37 臺灣), 08/31/2022 17:43:12