python中的classmethod,python@classmethod
python中定义类方法有三种方式:正则方式、@classmethod修饰方式和@staticmethod修饰方式。
classA(对象):
deffoo(self,x):
Print (Call foo function (%s,%s)%(self,x))
打印( self: ,self)
@classmethod
defclass_foo(cls,x):
print( Call class _ foo function(% s,%s)%(cls,x))
打印( cls: ,cls)
@静态方法
defstatic_foo(x):
Print(调用static_foo函数(%s)%(x))
A=A()1。定义方法
普通的foo()函数需要self参数来隐式传递当前类对象的实例。@classmethod修饰的方法class_foo()需要通过cls参数传递当前类对象。@staticmethod修饰的方法定义和普通函数的定义是一样的。
self和cls的区别不是强制性的,而是PEP8中的一种编程风格。slef通常用作实例方法的第一个参数,cls通常用作类方法的第一个参数。即当前类对象的实例由self交付,当前类对象由cls交付。
2.绑定对象
o方法绑定对象a的实例。
打印(a.foo)
boundmethoda . foo of _ _ main _ _ . aobjectat0x 100721 cf8
Class_foo方法绑定对象a
打印(a.class_foo)
boundmethoda . class _ fooofclass _ _ main _ _。一个
Static_foo没有参数绑定。
打印(a.static_foo)
functiona . static _ fooat0x 100727730相关推荐:《Python视频教程》
3.打电话的方式
o可以被实例A调用,但是直接调用时类对象A的参数会出错。
print(a.foo(1))
调用foo函数(_ _ main _ _。0x10245cf8,1处的对象)
self : _ _ main _ _ . aobjectat0x 10245 cc F8
print(A.foo(1))
回溯(mostrecentcalllast):
文件“/用户/刘慧玲/桌面/MT _ code/OPUnittest/case/demo . py”,第63行,模块中
print(A.foo(1))
type : foo()missing 1 required positional argument 3360 x class _ foo可由类对象A或对象实例A调用。
a.class_foo(2)
A.class_foo(2)
调用class_foo函数(class__main__。a ,2)
cls : class“_ _ main _ _”。 a static _ foo可以被类对象A或对象实例A调用。
a=A()
a.static_foo(3)
A.static_foo(3)
调用static_foo函数(3)4。继承与重写普通的类函数是一样的。
丙类(甲):
及格
c=C()
c.foo(1)
c.class_foo(1)
C.static_foo(1)运行结果:
调用foo函数(_ _ main _ _。bobobject0x 10246 a2b 0,1)
self : _ _ main _ _ . bobobjectat0x 10246 a2 b 0
调用class_foo函数(class__main__。b ,1)
cls:class__main__。 b
调用static_foo函数(1)
郑重声明:本文由网友发布,不代表盛行IT的观点,版权归原作者所有,仅为传播更多信息之目的,如有侵权请联系,我们将第一时间修改或删除,多谢。