如何理解@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