重庆分公司,新征程启航
为企业提供网站建设、域名注册、服务器等服务
cls是class的缩写。
专注于为中小企业提供成都做网站、网站设计服务,电脑端+手机端+微信端的三站合一,更高效的管理,为中小企业碧江免费做网站提供优质的服务。我们立足成都,凝聚了一批互联网行业人才,有力地推动了数千家企业的稳健成长,帮助中小企业通过网站建设实现规模扩充和转变。
class A:
member = "this is a test."
def __init__(self):
pass
@classmethod
def Print1(cls):
#杩欎釜鏄被鏂规硶
print "print 1: ", cls.member
def Print2(self):
print "print 2: ", self.member
@classmethod
def Print3(paraTest):
print "print 3: ", paraTest.member
a = A()
A.Print1() #相当于Print1(A)
a.Print2() #相当于Print2(a), 请注意@classmethod
A.Print3()
可以看出来,python在通过“.”调用成员函数的时候,会将“.”前面的东西当作函数的第一个参数调用。
而且pyhon并不关心我们把类的成员函数的第一个参数的名称是什么,我们可以用任意的名称,可以看Print3的定义就知道了。
普通的方法,第一个参数需要是self,它表示一个具体的实例本身。
如果用了staticmethod,那么就可以无视这个self,而将这个方法当成一个普通的函数使用。
而对于classmethod,它的第一个参数不是self,是cls,它表示这个类本身。
class A(object):
def foo1(self):
print "Hello",self
@staticmethod
def foo2():
print "hello"
@classmethod
def foo3(cls):
print "hello",cls
a = A()
a.foo1() #最常见的调用方式,但与下面的方式相同
Hello __main__.A object at 0x9f6abec
A.foo1(a) #这里传入实例a,相当于普通方法的self
Hello __main__.A object at 0x9f6abec
A.foo2() #这里,由于静态方法没有参数,故可以不传东西
hello
A.foo3() #这里,由于是类方法,因此,它的第一个参数为类本身。
hello class '__main__.A'
A #可以看到,直接输入A,与上面那种调用返回同样的信息。
class '__main__.A'
为了把类中的变量传递给类中的函数,我们需要用到3个特定格式
① 第一个格式 @classmethod 的中文意思就是“类方法”,@classmethod声明了函数1是类方法,这样才能允许函数1使用类属性中的数据。
② 第二个格式 cls 的意思是class的缩写。如果类方法函数1想使用类属性(也就是类中的变量),就要写上cls为函数1的第一个参数,也就是把这个类作为参数传给自己,这样就能被允许使用类中的数据。
③ 第三个格式是 cls.变量 。类方法想使用类属性的时候,需要在这些变量名称前加上cls. 这就好比类方法和类之间的约法三章,所以但凡有任何格式错误都会报错。
如果缺①,即缺了“@classmethod”,类方法就不能直接利用类中的属性,于是报错