[問題] @property
我在看@propery的實現方法
https://stackoverflow.com/questions/17330160/how-does-the-property-decorator-work-in-python
大約可以了解descriptor object的用法。文中有提到下面Property的class內容
https://docs.python.org/3/howto/descriptor.html#properties
不過我還有一個疑問,如下面的程式碼,@x.setter的x是哪來的︊我知道這個x是跟函式名一樣,但是就property的class,看不出來
@x.setter的x是怎麼產生的
-------------------------------
class A(object):
@property
def x(self):
return self._x
@x.setter
def x(self, value):
self._x = value
-------------------------------
--
※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 220.136.87.214 (臺灣)
※ 文章網址: https://www.ptt.cc/bbs/Python/M.1660663353.A.148.html
推
08/17 10:33,
2年前
, 1F
08/17 10:33, 1F
推
08/18 00:44,
2年前
, 2F
08/18 00:44, 2F
→
08/18 00:44,
2年前
, 3F
08/18 00:44, 3F
我知道,我的問題是這個x是怎麼產生的。它是怎麼實現的?
※ 編輯: tsaiminghan (101.12.18.70 臺灣), 08/19/2022 15:12:42
推
08/26 12:43, , 4F
08/26 12:43, 4F
→
08/26 12:43, , 5F
08/26 12:43, 5F
→
08/26 12:49, , 6F
08/26 12:49, 6F
→
08/26 12:50, , 7F
08/26 12:50, 7F
→
08/31 16:31, , 8F
08/31 16:31, 8F
我後來有想到下面。
應該就像一般的@結果一樣。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
討論串 (同標題文章)
Python 近期熱門文章
PTT數位生活區 即時熱門文章