在Python中调用或在_init__中初始化属性
在_init___方法或getter中定义私有类变量更好吗?在调用之前,似乎不需要定义变量 在init中定义变量:在Python中调用或在_init__中初始化属性,python,properties,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
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
在需要类属性之前,不需要定义它们,至少从解释器的角度来看是这样,但这有很大的好处,因为它大大提高了代码的可读性。为此,您应该在类定义中定义它们,而不是在init中 这类定义的例子如下:
class MyClass:
"""A simple example class"""
i = 12345
def f(self):
return 'hello world'
对于您的特定示例,您可以在文档中阅读更多内容,这两种方法都过于复杂。尝试:
class Foo(object):
def __init__(self):
self.bar = Bar()
在类定义中定义它们是什么样子的?你是指类属性,还是指实例属性?因为
self.\u bar
在这里是一个实例属性,没有类属性。在中执行self.\u bar=None
就是定义它。我的意思是实例属性。它没有封装变量。此外,在我们确定Bar属性是否会被调用之前,它会使用内存创建一个新的Bar。@travis1097当您说它没有封装变量时,您的意思是它应该是self.\u Bar=Bar()
?因为除此之外还不清楚你的意思。OP实际上是在讨论实例属性。这种情况不适用。