1

一直是我的梦想,someclass.func而不是使用someclass.func(). 我读到了@decorators. 现在我问:

哪种方式更好?

方式一

class Main(object):

    def __init__(self):

        self.func()

    def func(self):

        print 'hi'

或者...

方式二

class Main(object):

    def __init__(self):

        self.func

    @property
    def func(self):

        print 'hi'

编辑

这是代码: http ://randomgalaxy.com/stackoverflow/python-property-vs-func/term.py

4

3 回答 3

8

如果func真的打印值,那么不,将其设为属性不是正确的做法。属性——顾名思义——是附加到对象的值。因此,带有@property装饰器的函数应该返回一个值,否则没有副作用。

于 2013-10-17T22:14:04.093 回答
2

编辑:在阅读您的实际代码后,绝对方式 1

最有可能:方式 1

但这取决于你实际上想要做什么。您提出的这个案例过于简单化了。

根据我的经验,使用 @property 装饰器是一种保护类成员的方法(仅允许读取),一种在设置/读取变量时进行一些簿记的方法,或者一种提供对类成员函数的访问的方法(即,只返回您请求的值,即使它需要一些额外的计算才能获得该值)。我个人喜欢用它来进行懒惰的评估

于 2013-10-17T22:21:30.943 回答
1

属性应该是。不是函数。
例子:

class Foo(object):
    def __init__(self, a, b):
        self.__a = a
        self.__b = b

    @property
    def a(self):
        return self.__a

    @property
    def b(self):
        return self.__b

在此示例中,值是私有的,您无法更改它们。

所以在那里做其他事情是个坏主意吗?我的意思是在我的脚本函数中更改了我的变量并调用了另一个函数 – Vik2015 45 秒前

这是非常糟糕的风格。你不在红宝石中:)

于 2013-10-17T22:15:06.083 回答