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
