python中cls关键字

Posted lypbendlf

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了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
复制代码

 

以上是关于python中cls关键字的主要内容,如果未能解决你的问题,请参考以下文章

python中self,cls

Python笔记 · self,cls,实例方法,静态方法,类方法

VB中Cls是啥意思

Python函数`cls.score`和`clf.cv_results_`之间的区别

python类中的self参数和cls参数

vs 2010代码片段