python中的classmethod,python@classmethod

  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的观点,版权归原作者所有,仅为传播更多信息之目的,如有侵权请联系,我们将第一时间修改或删除,多谢。

留言与评论(共有 条评论)
   
验证码: