python里@property有什么用

  统计/机器学习 Python    浏览次数:189        分享
0

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]: >
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面经 问答 实战

cabbage   2019-02-22 14:51

1

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面经 问答 实战

chrisliang   2019-03-19 10:18



  相关主题

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

在jupyter notebook后台进程没关闭的情况下,只要是之前使用过且没有shutdown的notebook一直会占用内存吗?   2回答

如何将csv中多行变成一行   2回答

python的dataframe如何重新排列行或者列   1回答

怎么合并(串联)两个dataframe?   1回答

怎么在jupyter notebook里查看python的版本?   1回答

DataFrame批量修改列名   1回答

python里的<<或者>>符号是什么意思?   2回答

Anaconda安装wptools失败,提示找不到该包   1回答

python里有没有类似matlab里linspace的功能?   2回答

python里的cdef是什么?   1回答

获取DataFrame所占空间的大小   2回答



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

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

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

我们谢绝答非所问。

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

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