gpt4 book ai didi

python - 为什么从方法和外部读取的类变量不同?

转载 作者:行者123 更新时间:2023-11-28 20:32:55 25 4
gpt4 key购买 nike

所以,我创建了一些类

class Some:
@classmethod
def __init__(cls, somevar):
cls.somevar = somevar

@classmethod
def read(cls):
return cls.somevar

现在我尝试在外部设置变量并从类中读取它:

instance = Some([1, 2, 3])
instance.somevar = [4, 5, 6]
print(instance.read())

>>>> [1, 2, 3]

但是在类外调用相同命名的变量却给我预期的输出,

print(instance.somevar)
>>>> [4, 5, 6]

我对 OOP 的误解是什么?

编辑

我的目标是创建多个 Some 实例,它们将拥有自己的值。

最佳答案

事实上,您误解了类变量是什么。当你使用

instance.somevar = [4, 5, 6]

它不会改变您认为的值。相反,您需要做的是像这样更改实际的类变量,

instance = Some([1, 2, 3])
instance.somevar = [4, 5, 6]
print(instance.read())
instance2 = Some([4, 5, 6])
print(instance.read())

>>>>
[1, 2, 3]
[4, 5, 6]

确实,不要忘记通过使用 @classmethod 装饰器,cls 实际上就是类本身。因此,在您的情况下,cls.somevar 将在所有类之间共享。此外,由于您修饰了 __init__,因此每次实例化类时都会更改该变量的值,如我上面的示例中的经验所示。


请注意,这可能不是您正在寻找的实现。你可能想像这样使用 self

class Some:
def __init__(self, somevar):
self.somevar = somevar

def read(self):
return self.somevar

instance = Some([1, 2, 3])
print(instance.read())
instance.somevar = [4, 5, 6]
print(instance.read())

>>>>
[1, 2, 3]
[4, 5, 6]

关于python - 为什么从方法和外部读取的类变量不同?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51707081/

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