python中@staticmethod 、@classmethod 与一般方法的区别

来源:互联网 发布:淘宝代销物流怎么设置 编辑:程序博客网 时间:2024/06/11 13:57
  1. 一般方法使用 类生成的对象调用
  2. 静态方法用类直接调用
  3. 类方法用类直接调用类当参数传入方法
  4. 如下面例子:
  5. ###################################
  6. class Person:  
  7.   
  8.     def __init__(self):  
  9.         print "init"  
  10.  
  11.     @staticmethod  
  12.     def sayHello(hello):  
  13.         if not hello:  
  14.             hello='hello'  
  15.         print "i will sya %s" %hello  
  16.  
  17.  
  18.     @classmethod  
  19.     def introduce(clazz,hello):  
  20.         clazz.sayHello(hello)  
  21.         print "from introduce method"  
  22.   
  23.     def hello(self,hello):  
  24.         self.sayHello(hello)  
  25.         print "from hello method"         
  26.   
  27.   
  28. def main():  
  29.     Person.sayHello("haha")  
  30.     Person.introduce("hello world!")  
  31.     #Person.hello("self.hello") #TypeError: unbound method hello() must be called with Person instance as first argument (got str instance instead)  
  32.       
  33.     print "*" * 20  
  34.     p = Person()  
  35.     p.sayHello("haha")  
  36.     p.introduce("hello world!")  
  37.     p.hello("self.hello")  
  38.   
  39. if __name__=='__main__':  
  40.     main()  

 

output:

Shell代码  收藏代码
  1. i will sya haha  
  2. i will sya hello world!  
  3. from introduce method  
  4. ********************  
  5. init  
  6. i will sya haha  
  7. i will sya hello world!  
  8. from introduce method  
  9. i will sya self.hello  
  10. from hello method  
1 0