在调用时初始化属性或在Python中的__init__中初始化属性

时间:2013-08-13 19:23:26

标签: python properties

在__init__方法或getter中定义私有类变量是否更好?似乎在调用变量之前无需定义变量。

init 中定义变量:

class Foo(object):
    def __init__(self):
        self._bar = None

    @property
    def bar(self):
        if self._bar is None:
            self._bar = Bar()
        return self._bar

    @bar.setter
    def bar(self, value):
        self._bar = value

在getter中定义它:

class Foo(object):
    @property
    def bar(self):
        if not hasattr(self, '_bar'):
            self._bar = Bar()
        return self._bar

    @bar.setter
    def bar(self, value):
        self._bar = value

2 个答案:

答案 0 :(得分:-1)

在您需要之前无需定义类属性,至少不需要从解释器角度来定义类属性,但是因为它极大地提高了代码的可读性,所以可以获得巨大的收益。为此,你应该在类定义中定义它们,而不是在init中。

此类定义的示例如下:

class MyClass:
    """A simple example class"""
    i = 12345
    def f(self):
        return 'hello world'

您可以在文档http://docs.python.org/2/tutorial/classes.html

中阅读更多内容

答案 1 :(得分:-1)

对于您的特定示例,两种方式都过于复杂。尝试:

class Foo(object):
    def __init__(self):
        self.bar = Bar()