python里@property有什么用

  统计/机器学习 Python    浏览次数:4681        分享
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



  相关讨论

关于爬虫遇见了"input type=hidden",然后想直接用lxml,不用selenium的办法

请问python已知某个元素,怎么得到该元素在dataframe中的位置

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

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

求多个torch tensor的平均值

怎么用python生成一个二维码,扫码跳转到一个指定的网页?

问句python语法含义

怎么check dataframe 中的某个元素是否字符串?

怎么把一个大的dataframe按行分割成若干个小的dataframe。

引用报错ImportError: No module named stats

  随便看看

logloss的取值范围是多少?一般好的分类器能达到多少?

sklearn中的predict_proba方法的返回值的意义

除了PCA,还有什么降维的方法?

numpy.array转换为图片并显示出来

如何清空pandas dataframe里的全部数据但是保留列名?