Python classMethod描述符

来源:互联网 发布:阿里云服务器 域名 编辑:程序博客网 时间:2024/05/16 12:08

http://bestchenwu.iteye.com/blog/1048395  


通常情况下,如果我们要使用一个类的方法,那我们只能将一个类实体化成一个对象,进而调用对象使用方法。

     比如:

   

Java代码  收藏代码
  1. class C(object):  
  2.     def boo(self):  
  3.         print "boo";  
  4.     @classmethod  
  5.     def foo(cls):  
  6.         print "foo";  
  7. c=C();  
  8. c.boo();  
  9. C.foo();  

 

 

  第一个函数为普通的类方法,需要传入一个self,即类实例来调用,而第二个方法为一个独立于类结构的方法。

  注意:@classmethod 仅仅适用于单独的,与类本身的数据结构无关函数,其实用了它的函数,与使用普通函数无异,甚至不能在参数里加入 self,如果要在其中使用类的数据结构,仍然需要将类实例化一次才可以,所以要小心使用。

 

  让我们更进一步看看foo()函数到底传入的是什么东西?稍微做下改造:

 

Python代码  收藏代码
  1. class C(object):  
  2.     def boo(self):  
  3.         print "boo";  
  4.     @classmethod  
  5.     def foo(cls):  
  6.         print cls;  
  7.         print "foo";  
  8. c=C();  
  9. print c;  
  10. print C;  
  11. #c.boo();  
  12. C.foo();  
  13.   
  14. 输出:  
  15. <__main__.C object at 0x00C468D0>  
  16. <class '__main__.C'>  
  17. <class '__main__.C'>  
  18. foo  

 

由此可以看出foo函数里传入的的确是类C,而非实例c,证明了它跟实例无关

原创粉丝点击