gpt4 book ai didi

python - 定义具有大量属性的 Python 类 - 样式

转载 作者:太空狗 更新时间:2023-10-29 20:44:06 24 4
gpt4 key购买 nike

我有一个具有多个属性的类。有人可以澄清设置属性之间的区别,例如下面的 a、b、c 和 x、y、z。我知道如果你的论点进来,他们显然必须在 init 中,但是,只是为了设置一些默认变量,这是首选,有什么优缺点。

class Foo(object):
a = 'Hello'
b = 1
c = False
def __init__(self):
self.x = 'World'
self.y = 2
self.z = True

最佳答案

变量 abc 是类变量。在首次创建类时,它们会被评估和设置一次。变量 xyz 是实例变量,每当该类的对象被实例化时,它们都会被评估和设置。

一般来说,如果类的每个实例都将使用相同的值,则可以使用类变量,并且只需要计算一次。您将实例变量用于该类的每个实例都不同的变量。

您可以通过实例变量语法 self.a 访问类变量,但所讨论的对象在该类的所有实例之间共享。这在使用不可变数据类型(如整数或字符串)时影响不大,但在使用可变数据类型(如列表)时,附加到 self.a 会导致所有实例看到新附加的值.

IDLE 中的一些示例可能有助于理解这一点:

>>> class Foo(object):
a = 'Hello'
b = []
def __init__(self):
self.y = []

>>> instance_1 = Foo()
>>> instance_2 = Foo()
>>> instance_1.a
'Hello'
>>> instance_2.a
'Hello'
>>> instance_1.a = 'Goodbye'
>>> instance_1.a
'Goodbye'
>>> instance_2.a
'Hello'
>>> instance_1.b
[]
>>> instance_2.b.append('12345')
>>> instance_1.b
['12345']
>>> instance_2.y
[]
>>> instance_2.y.append('abcde')
>>> instance_2.y
['abcde']
>>> instance_1.y
[]

关于python - 定义具有大量属性的 Python 类 - 样式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12397712/

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