如何理解@classmethod下的cls参数?

示例代码如下

class Foo:

__v = None

@classmethod

def get_instance(cls):

if cls.__v:

return cls.__v

else:

cls.__v = Foo()

print(cls)

return cls.__v

obj = Foo.get_instance()

obj2 = Foo.get_instance()

def main():

print(obj)

print(obj2)

以这个单例模式举例,当第一次调用Foo.get_instance()使代码进入else分支,第二次调用进入if分支。在这个过程obj和obj2是指向的同一个对象,即else分支中Foo()得到的对象。我知道cls参数是Foo类这个对象,而且Foo类中有__v这个成员,问题是它是如何当再次调用get_instance时保证cls.__v不是None的。
而且通过cls不是应该访问不到__v的么?
图片描述

回答:

__v 是放在类下的,又不是放在实例下来的。“类”和“实例”本来就是两个东西。

还有:

class Foo(object): 

pass

这样写。

以上是 如何理解@classmethod下的cls参数? 的全部内容, 来源链接: utcz.com/a/164523.html

回到顶部