为了辨析它们的差别,写了如下代码: 
 class C:

     def self_method(self, a):
return a @classmethod
def class_method(cls, a):
return a @staticmethod
def static_method(a):
return a def method(a):
return a if __name__ == '__main__':
  c = C()
  print(c.self_method('self method'))
  print(c.class_method('class method'))
  print(c.static_method('static method'))
  # print(c.method('method')) 运行出错
  # print(C.self_method('self method')) 运行出错
  print(C.class_method('class method'))
  print(C.static_method('static method'))
  print(C.method('method'))

因此:

  1. 实例方法定义时第一个参数为类的一个实例(self),调用时必须通过实例调用。可以访问实例属性和方法。
  2. 类方法使用@classmethod装饰,第一个参数为类(cls),调用时可以通过类的实例或者类本身来调用。可以访问类属性和方法。
  3. 静态方法使用@staticmethod装饰,调用时可以使用类的实例或者类本身来调用。
  4. 普通方法其实是在类中定义了一个普通函数,调用时必须通过类本身来调用。

最新文章

  1. hibernate 中根据id删除一条记录的语句
  2. CSS3 animation 动画
  3. 《TCP/IP详解 卷1:协议》读书笔记
  4. [No000039]操作系统Operating Systems用户级线程User Threads
  5. struts1
  6. Tomcat 使用说明
  7. 获取手机的gps定位
  8. 【poj1274】 The Perfect Stall
  9. 用MSBuild和Jenkins搭建持续集成环境 - 转
  10. 【转】Android下编译jni库的二种方法(含示例) -- 不错
  11. 解决Visual Studio For Mac Restore失败的问题
  12. HDU - 3567 IDA* + 曼哈顿距离 + 康托 [kuangbin带你飞]专题二
  13. Python_day_01
  14. JavaSE_坚持读源码_Object对象_Java1.7
  15. mysql-索引-日志
  16. [BUAA_SE_2017]案例分析-Week3
  17. centos 打包报错Can't connect to X11 window server using ':0.0' as the value of the DISPLAY variable.
  18. Mysql 6.0安装过程(截图放不上去)
  19. UltraCompare 激活
  20. Find a way--hdu2612

热门文章

  1. python全栈开发 生成器 :生成器函数,推导式及生成器表达式
  2. powerdesigenr设置主外键颜色
  3. as3.0用了视频组件,导致视频打开后就全屏,加一下代码就行
  4. 高级测试岗位面试题---MARK
  5. C/C++ typedef用法详解(真的很详细)
  6. 3. Longest Substring Without Repeating Characters (ASCII码128个,建立哈西表)
  7. js常用的数组,,字符串,,Math..正则方法
  8. 842. Split Array into Fibonacci Sequence能否把数列返回成斐波那契数列
  9. POST请求测试地址
  10. 云计算之 PaaS详解