gpt4 book ai didi

python - 使用 self 访问类方法和变量

转载 作者:行者123 更新时间:2023-12-03 15:22:10 24 4
gpt4 key购买 nike

在下面的例子中 测试 类有两个实例方法和一个类方法

set_cls_var_1 方法我使用self设置类变量。

set_cls_var_2 方法我使用self调用类方法。

   class Test():

#class variable
cls_var = 10

def __init__(self):
obj_var=20

def set_cls_var_1(self,val):
#second method to access class variable
print "first "
self.cls_var = val

def set_cls_var_2(self):
print "second"
self.task(200)

@classmethod
def task(cls,val):
cls.cls_var = val


t=Test()

#set class variable by first method
t.set_cls_var_1(100)

print Test.cls_var

#set class variable by second method
t.set_cls_var_2()

print Test.cls_var

输出
first 
10
second
200

预期输出
first 
100
second
200

我的问题是:
为什么只有 classmethod 可以自己调用,为什么不能调用 class 变量

最佳答案

当您尝试使用 self 访问对象的属性时, Python 首先搜索对象的属性。如果在那里找不到它,则搜索对象的类的属性。这就是你的情况;

Python优先搜索t的属性。它没有找到 cls_var ,所以它然后搜索 T类的属性。它找到 cls_var所以它停止,并返回 cls_var的值(value)。

但是,当为 self 分配属性时, Python 总是将它们直接分配给对象,除非明确告诉这样做,否则从不分配对象的类。这就是为什么屁股self.cls_var100没有影响Testcls_var属性。

关于python - 使用 self 访问类方法和变量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45121614/

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