python中cls关键字

1.python中cls用法

https://www.zhihu.com/question/49660420

复制代码
class A(object):
    a = 'a'
    @staticmethod
    def foo1(name):
        print('hello', name)
    def foo2(self, name):
        print ('hello', name)
    @classmethod
    def foo3(cls, name):
        print ('hello', name)
A.foo1('hhh')
A.foo3('clssss')

#输出:
hello hhh
hello clssss
复制代码

简单来说,就是cls用在@classmethod方法中,使得该方法仅通过类名就可以访问,无需建立对象;csl就相当于普通类函数中的self参数,通过它就可以防止硬编码,而访问类中的属性和函数

复制代码
class A(object):
    a = 'a'
    def __init__(self,a,b):
        print(a,b)

    @classmethod
    def foo3(cls, name):
        print ('hello', name)
        a,b=1,2
        cls(a,b)
A.foo3('clssss')

#输出:
hello clssss
1 2
复制代码

 就可以直接调用了__init__函数,初始化了。当然如果存在类继承,就会是这个样子,会运行B的初始化函数,我也是惊呆了。

复制代码
class A(object):
    a = 'a'
    def __init__(self,a,b):
        print(a,b)

    @classmethod
    def foo3(cls, name):
        print ('hello', name)
        a,b=1,2
        cls(a)#在这里调用了b的初始化函数

class B(A):
    def __init__(self,a):
        print('B',a)
B.foo3('clssss')

#输出:
hello clssss
B 1
复制代码

 再稍微照着bert修改一下:

复制代码
class A(object):
    a = 'a'
    def __init__(self,a,b):
        print(a,b)

    @classmethod
    def foo3(cls, name):
        print ('hello', name)
        a,b=1,2
        model=cls(a)
        return model  #可以返回一个B的对象
class B(A):
    def __init__(self,a):
        self.b=a
        print('B',a)
b=B.foo3('clssss')#这里通过B来调用类函数~~~其实也就和A没啥关系了,只不过实现放在了A中而已

#输出:
hello clssss
B 1
>>> b.b
1
复制代码
原文地址:https://www.cnblogs.com/BlueBlueSea/p/14880979.html