python里@property有什么用

  统计/机器学习 Python    浏览次数:1616        分享
1

python的class里出现的@property是什么意思?有什么用?

比如下面这个例子

class MyClass:
    ...
    @property
    def get_date(self):
        return self._get_date
 

马一虎   2019-02-20 11:41



   2个回答 
5

将类方法转换为只读属性

例如



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


SofaSofa数据科学社区DS面试题库 DS面经

cabbage   2019-02-22 14:51

2

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面经

chrisliang   2019-03-19 10:18



  相关主题

Jupiter notebook里一个cell显示多个dataframe   1回答

dataframe数据变long python有stata类似的命令吗   1回答

gc.collect()返回值是什么意思   1回答

print里的"%.2f"是什么意思?   1回答

怎么把python的dict存为json格式文件   2回答

from __future__ import division是什么意思   3回答

求多个torch tensor的平均值   1回答

python倒序的range   1回答

python如何读取元素中含有逗号的csv文件   1回答

python __del__ 求解释   3回答

map lambda if逗号报错,invalid syntax   1回答

如何对将Python dictionary里的key按照value进行排序?   1回答



回答问题时需要注意什么?

我们谢绝在回答前讲“生动”的故事。

我们谢绝“这么简单,你自己想”、“书上有的,你认真看”这类的回答;如果你认为对方的提问方式或者内容不妥,你可以直接忽略该问题,不用进行任何作答,甚至可以对该问题投反对票。

我们谢绝答非所问。

我们谢绝自己不会、硬要回答。

我们感激每一个用户在编写答案时的努力与付出!