classmethod 调用问题
正在学习类概念,自己在尝试下面代码的时候 发现出来的结果和自己想的不一样,class A(object):
bar = 1
def foo(self):
print('foo')
@classmethod
def class_foo(cls):
cls.bar = 3
print(cls.bar, cls().foo())
A.class_foo()
我以为会出来
3 foo
结果出来的是
foo
3 None
不知道有没有大哥能给帮忙解释一下,非常感谢 会使用pychram吗。 会调试模式吗?
先执行的 cls().foo() 返回None
print('foo')
在执行 print(cls.bar, cls().foo())
print(cls.bar, None)
print(3, None) 本帖最后由 suibian22 于 2021-4-4 09:09 编辑
Cool_Breeze 发表于 2021-4-2 09:20
会使用pychram吗。 会调试模式吗?
先执行的 cls().foo() 返回None
print('foo')
还是小白在学习,能再解释得细一点吗,非常感谢。尝试看了一下调试模式,但是也没整明白。
为什么cls(),foo()会先执行? 他不是在cls.bar后面吗? 而且他为什么会返回None?
小白从零学python,还望大佬不吝赐教。 suibian22 发表于 2021-4-4 08:49
还是小白在学习,能再解释得细一点吗,非常感谢。尝试看了一下调试模式,但是也没整明白。
为什么cl ...
class A(object):
bar = 1
def foo(self):
print('foo')
@classmethod
def class_foo(cls):
cls.bar = 3
print(cls.bar, cls().foo())
A.class_foo()
# 1. 程序从12行开始
# 2. 到8、9行,然后到10行的print
# 3. 但是10行的print有两个参数
# 4. 要执行10行print先要获得其中两个参数值
# 5. 先获得cls.bar的值3
# 6. 再获得cls().foo()的返回值:先实例化->cls(), 再执行foo方法->foo方法打印'foo'(控制台上的第一个输出),再返回None(因为foo方法没写return默认返回None)
# 7. 这时第4步的print已经获得两个参数的值,3和None,可以执行print(3, None)->控制台第二个输出3, None
本帖最后由 Stubborn 于 2021-4-4 10:50 编辑
你记得,调用函数,等函数运行完成才有结果
print(cls.bar, cls().foo()) 这里调用了foo()函数,那么只能等foo函数运行完成,返回结果,print才能打印结果。所以foo优先被打印出来
A.class_foo()-> print(cls.bar, cls().foo()) -> print('foo')->foo()返回None -> print(cls.bar=3, cls().foo()=None) hrp 发表于 2021-4-4 10:37
原来是这样。非常感谢 Stubborn 发表于 2021-4-4 10:48
你记得,调用函数,等函数运行完成才有结果
print(cls.bar, cls().foo()) 这里调用了foo()函数,那么只能 ...
感谢大佬指点
页:
[1]