gpt4 book ai didi

python - 在 Python 中首先将对象属性初始化为类属性

转载 作者:太空宇宙 更新时间:2023-11-04 10:25:11 26 4
gpt4 key购买 nike

我习惯于在该类的构造函数中初始化该类实例的属性,但是,如果属性对类非常严格,我也会声明它们并将它们初始化为 None([] 或其他一些基值)作为类中的属性。

例如:

 class AClass(object):
aprop = None

def __init__(self):
self.aprop = "avalue"

在大多数情况下,它不会与仅仅这样做有太大区别:

 class AClass(object):

def __init__(self):
self.aprop = "avalue"

但是,如果有人获得了 AClass 的范围,就会注意到此类的实例应该具有名为 aprop 的属性。我认为它是类中属性 aprop 的占位符。

在我看来,这更像是一个风格问题,但我想知道这是否是一种好的做法。你会推荐它吗?有什么共同点吗?还是我应该尝试摆脱它?

最佳答案

当您在 __init__ 函数中执行 self.aprop = "avalue" 时,AClass 的每个实例都将具有 aprop 属性,因为 __init__ 在您启动实例时被调用。这使得 aprop 成为一个实例变量

当您执行aprop = None 时,您将类变量 添加到AClass。这意味着该类本身将具有此属性。

例如:

>>> class AClass(object):
... def __init__(self):
... self.aprop = "avalue"
...
>>> AClass.aprop
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
AttributeError: type object 'AClass' has no attribute 'aprop'

和:

>>> class AClass(object):
... aprop = None
... def __init__(self):
... self.aprop = "avalue"
...
>>> AClass.aprop
>>> print AClass.aprop
None

所以如果你想让你的类拥有这个属性,你应该将它定义为一个类变量。如果你只在实例中使用它,你应该定义一个类属性的唯一情况是你不总是在 __init__ 中重新定义它(隐藏它):

class AClass(object):
aprop = None
def __init__(self):
self.bprop = "bvalue"

关于python - 在 Python 中首先将对象属性初始化为类属性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29784014/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com