博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
python中staticmethod classmethod及普通函数的区别
阅读量:6580 次
发布时间:2019-06-24

本文共 1341 字,大约阅读时间需要 4 分钟。

http://genggeng.iteye.com/blog/1290458

staticmethod 基本上和一个全局函数差不多,只不过可以通过类或类的实例对象(python里光说对象总是容易产生混淆, 因为什么都是对象,包括类,而实际上类实例对象才是对应静态语言中所谓对象的东西)来调用而已, 不会隐式地传入任何参数。这个和静态语言中的静态方法比较像。

classmethod 是和一个class相关的方法,可以通过类或类实例调用,并将该class对象(不是class的实例对象)隐式地 当作第一个参数传入。就这种方法可能会比较奇怪一点,不过只要你搞清楚了python里class也是个真实地 存在于内存中的对象,而不是静态语言中只存在于编译期间的类型。

正常的方法就是和一个类的实例对象相关的方法,通过类实例对象进行调用,并将该实例对象隐式地作为第一 个参数传入,这个也和其它语言比较像。

可如下示例:

Python代码  
  1. #!/usr/bin/python  
  2. #coding:utf-8  
  3.   
  4. #author:    gavingeng  
  5. #date:      2011-12-03 10:50:01   
  6.   
  7. class Person:  
  8.   
  9.     def __init__(self):  
  10.         print "init"  
  11.  
  12.     @staticmethod  
  13.     def sayHello(hello):  
  14.         if not hello:  
  15.             hello='hello'  
  16.         print "i will sya %s" %hello  
  17.  
  18.  
  19.     @classmethod  
  20.     def introduce(clazz,hello):  
  21.         clazz.sayHello(hello)  
  22.         print "from introduce method"  
  23.   
  24.     def hello(self,hello):  
  25.         self.sayHello(hello)  
  26.         print "from hello method"         
  27.   
  28.   
  29. def main():  
  30.     Person.sayHello("haha")  
  31.     Person.introduce("hello world!")  
  32.     #Person.hello("self.hello") #TypeError: unbound method hello() must be called with Person instance as first argument (got str instance instead)  
  33.       
  34.     print "*" * 20  
  35.     p = Person()  
  36.     p.sayHello("haha")  
  37.     p.introduce("hello world!")  
  38.     p.hello("self.hello")  
  39.   
  40. if __name__=='__main__':  
  41.     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  

转载地址:http://uaino.baihongyu.com/

你可能感兴趣的文章
SpringBoot实战总汇--详解
查看>>
2018年7月1日笔记
查看>>
尝试使用iReport4.7(基于Ubuntu Desktop 12.04 LTS)
查看>>
动态规划:金矿模型
查看>>
子元素应该margin-top为何会影响父元素【转】
查看>>
AJAX 状态值(readyState)与状态码(status)详解
查看>>
BZOJ3668:[NOI2014]起床困难综合症(贪心)
查看>>
LightOJ 1245(Harmonic Number (II))
查看>>
小知识记录
查看>>
css3 animate 和关键帧 @-webkit-keyframes
查看>>
文字链接颜色设置
查看>>
图片转流
查看>>
ubunto应用软件
查看>>
HTML 标签说明
查看>>
锋利的jQuery-2--判断jQuery获取到的对象是否存在$().length
查看>>
linux 查询系统版本命令、查询端口号是否被占用命令
查看>>
java笔记八:IO流之字符流与字符缓冲流
查看>>
Docker 命令收集
查看>>
myeclipse注册码生成器
查看>>
怎样快速学好PHP技术之PHP学习方法总结
查看>>