gpt4 book ai didi

python类属性

转载 作者:IT老高 更新时间:2023-10-28 21:15:59 24 4
gpt4 key购买 nike

我对python中的类属性有疑问。

class base :
def __init__ (self):
pass
derived_val = 1

t1 = base()
t2 = base()

t2.derived_val +=1
t2.__class__.derived_val +=2
print t2.derived_val # its value is 2
print t2.__class__.derived_val # its value is 3

结果不同。我还使用 id() 函数查找 t2.derived_valt2.__class__.derived_val 具有不同的内存地址。我的问题是 derived_val 是类属性。为什么在上面的例子中有所不同?是不是因为类的实例在类属性旁边复制了自己的derived_val

最佳答案

有类属性和实例属性。当你说

class base :
derived_val = 1

您正在定义一个类属性。 derived_val 成为base.__dict__.

t2=base()
print(base.__dict__)
# {'derived_val': 1, '__module__': '__main__', '__doc__': None}
print(t2.__dict__)
# {}

当您说 t2.derived_val 时,Python 会尝试在 t2.__dict__ 中找到“derived_val”。由于它不存在,它会查看 t2 的任何基类中是否存在 'derived_val' 键。

print(t2.derived_val)
print(t2.__dict__)
# 1
# {}

但是,当您为 t2.derived_val 赋值时,您现在正在向 t2 添加一个实例属性。 derived_val 键被添加到 t2.__dict__

t2.derived_val = t2.derived_val+1
print(t2.derived_val)
print(t2.__dict__)
# 2
# {'derived_val': 2}

注意此时有两个derived_val属性,但只有实例属性很容易访问。 class 属性只能通过引用 base.derived_val 或直接访问类字典 base.__dict__ 来访问。

关于python类属性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2923579/

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