python的class里出现的@property是什么意思?有什么用?
比如下面这个例子
class MyClass:
...
@property
def get_date(self):
return self._get_date
2个回答
将类方法转换为只读属性
例如
class MyClass:
def __init__(self,a,b):
self.a = a
self.b = b
def a_add_b(self):
return self.a+self.b
In [13]:m=MyClass(1,2)
In [14]: m.a_add_b()
Out[14]: 3
In [16]: m.a_add_b
Out[16]: <bound method MyClass.a_add_b of <__main__.MyClass object at 0x000001795A776CC0>>
In [4]: m.a_add_b = 4
In [5]: m.a_add_b
Out[5]: 4
In [6]: m.a_add_b()
---------------------------------------------------------------------------
TypeError Traceback (most recent call last)
in ()
----> 1 m.a_add_b()
TypeError: 'int' object is not callable
class MyClass:
def __init__(self,a,b):
self.a = a
self.b = b
@property
def a_add_b(self):
return self.a+self.b
In [21]: m=MyClass(1,2)
In [22]: m.a_add_b
Out[22]: 3
In [23]: m.a_add_b=4
---------------------------------------------------------------------------
AttributeError Traceback (most recent call last)
in ()
----> 1 m.a_add_b=4
AttributeError: can't set attribute
cabbage提到了只读,此外,property是一个装饰器,把一个method装饰成attribute。好处是什么呢,只有当该attribute被调用的时候,才会被计算。比如下面这个例子,
class Tester:
def __init__(self, a):
self._a = a
@property
def a(self):
return self._a
@property
def square(self):
return self.a ** 2
初始化
t = Tester(2)
print(t.square)
显示结果为4。所以定义的时候是个方法,调用的时候被装饰为属性。
SofaSofa数据科学社区DS面试题库 DS面经