改善房地产装饰师的表现?

时间:2019-01-21 09:13:07

标签: python properties python-decorators

我试图理解和使用属性装饰器主要是为了使属性只读。我看到,每次使用属性时,它都会进入属性装饰器。

在我的示例中,它进入装饰器三次,每次打印一次:

class PropTest:

    def __init__(self,x):
        self._x = x

    @property
    def x(self):
        return self._x

    def check(self):
        print(self.x + 1)
        print(self.x + 2)
        print(self.x + 3)

t = PropTest(3)
t.check()

如果我在__init__中定义属性,它将仅输入一次。

class PropTest:

    def __init__(self,x):
        self.x = x

    def check(self):
        print(self.x + 1)
        print(self.x + 2)
        print(self.x + 3)

t = PropTest(3)
t.check()

我使用装饰器的方式错误吗?使用时是否存在性能问题?

L.E。 :

这是我尝试使用属性装饰器的方法。我不想每次使用该属性时都读取excel,并且我希望数据框为只读。

@property
def rules_df(self):
    """
    :return: A dataframe that contains the rules for labels
    """
    self._rules_df = pd.read_excel(self.cfg_file)
    return self._rules_df

2 个答案:

答案 0 :(得分:1)

您在第一个示例中正确使用了该属性。在第二个示例中,您不使用属性,而只是设置对象的成员。

属性只是使方法像字段一样起作用的语法糖。

可能会影响性能。通常不用担心。

如果要设置属性this Q/A on SO的值可能会有所帮助。

答案 1 :(得分:0)

仅显示对象属性没有创建属性的意义。如果需要在此处添加一些逻辑,则可以使用该属性。属性通常在Java,C#等语言中使用,但是在Python等语言中,您可以直接访问属性而无需创建属性。如示例所示,通过属性访问对象属性会对性能产生影响。您的第二个示例是一种更Python化的编码方式。