Python OOP类中的几种函数或方法总结


Posted in Python onFebruary 22, 2019

概述

实例方法

  • 使用实例调用时,默认传递实例本身到实例方法的第一个参数self
  • 使用类调用时,必须传递一个实例对象到实例方法的第一个参数

静态方法

  • 使用实例调用和类调用效果相同;

类方法

装饰器版:

  • 使用实例调用和类调用效果相同;

classmethod(function)版:

  • 在类中,尽量不要使用classmethod(function)实现类方法,会将其当做实例方法使用;
  • 使用实例调用时,会默认传递实例本身到函数的第一个参数,如果函数的参数个数为0,则报错;
  • 如果必须这样做,就使用类调用.

普通函数

  • 在类中,尽量不要定义普通函数,会将其当做实例方法使用;
  • 使用实例调用时,会默认传递实例本身到函数的第一个参数,如果函数的参数个数为0,则报错;
  • 如果必须这样做,就使用类调用.

总而言之,除了装饰器版的类方法和静态方法外,其它方法与函数均可看做是实例方法.

代码与运行结果

class A(object):
  def instant_method(self,*args):
    print('实例方法',*args)
  @classmethod
  def class_method_01(clz,*args):
    """第一个参数为class,调用时自动传递"""
    print('类方法(装饰器版)',*args)
  def class_method_02(*args):
    print('类方法(普通函数通过内置函数classmethond(function)转换版)',*args)
  classmethod(class_method_02)
  @staticmethod
  def static_method(*args):
    print('静态方法',*args)
  def normal_function(*args):
    print('普通函数',*args)
a=A()
# 调用实例方法
a.instant_method('通过实例调用')
A.instant_method(a,'通过类调用')
# 调用装饰器版类方法
a.class_method_01('通过实例调用')
A.class_method_01('通过类调用')
# 调用classmethod(function)版类方法
# 通过实例调用时,会默认传递实例本身到方法的第一个参数
a.class_method_02('通过实例调用')
A.class_method_02('通过类调用')
# 调用静态方法
a.static_method('通过实例调用')
A.static_method('通过类调用')
# 调用普通函数
# 通过实例调用时,会默认传递实例本身到方法的第一个参数
a.normal_function('通过实例调用')
A.normal_function('通过类调用')

输出

实例方法 通过实例调用
实例方法 通过类调用
类方法(装饰器版) 通过实例调用
类方法(装饰器版) 通过类调用
类方法(普通函数通过内置函数classmethond(function)转换版) <main.A object at 0x7f9b9b0486a0> 通过实例调用
类方法(普通函数通过内置函数classmethond(function)转换版) 通过类调用
静态方法 通过实例调用
静态方法 通过类调用
普通函数 <main.A object at 0x7f9b9b0486a0> 通过实例调用
普通函数 通过类调用

总结

以上就是这篇文章的全部内容了,希望本文的内容对大家的学习或者工作具有一定的参考学习价值,谢谢大家对三水点靠木的支持。如果你想了解更多相关内容请查看下面相关链接

Python 相关文章推荐
python连接mysql调用存储过程示例
Mar 05 Python
Python random模块(获取随机数)常用方法和使用例子
May 13 Python
Python自动调用IE打开某个网站的方法
Jun 03 Python
Python利用multiprocessing实现最简单的分布式作业调度系统实例
Nov 14 Python
Python中将变量按行写入txt文本中的方法
Apr 03 Python
python实现简单登陆系统
Oct 18 Python
python实现桌面壁纸切换功能
Jan 21 Python
Python中super函数用法实例分析
Mar 18 Python
python实现扫雷小游戏
Apr 24 Python
PyQt5连接MySQL及QMYSQL driver not loaded错误解决
Apr 29 Python
MAC平台基于Python Appium环境搭建过程图解
Aug 13 Python
matplotlib部件之矩形选区(RectangleSelector)的实现
Feb 01 Python
VSCode Python开发环境配置的详细步骤
Feb 22 #Python
python中logging模块的一些简单用法的使用
Feb 22 #Python
Python 限制线程的最大数量的方法(Semaphore)
Feb 22 #Python
Python3.6.x中内置函数总结及讲解
Feb 22 #Python
python自定义线程池控制线程数量的示例
Feb 22 #Python
Python实现多进程的四种方式
Feb 22 #Python
python在回调函数中获取返回值的方法
Feb 22 #Python
You might like
一道求$b相对于$a的相对路径的php代码
2010/08/08 PHP
thinkphp模板继承实例简述
2014/11/26 PHP
thinkphp关于简单的权限判定方法
2017/04/03 PHP
JavaScript开发时的五个注意事项
2007/12/08 Javascript
caller和callee的区别介绍及演示结果
2013/03/10 Javascript
jQuery文本框(input textare)事件绑定方法教程
2013/04/24 Javascript
js中点击空白区域时文本框与隐藏层的显示与影藏问题
2013/08/26 Javascript
jquery.validate的使用说明介绍
2013/11/12 Javascript
jquery实现拖拽调整Div大小
2015/01/30 Javascript
jquery实现经典的淡入淡出选项卡效果代码
2015/09/22 Javascript
js密码强度检测
2016/01/07 Javascript
jQuery插件开发汇总
2016/05/15 Javascript
常用的js验证和数据处理总结
2016/08/02 Javascript
js返回顶部实例分享
2016/12/21 Javascript
Extjs表单输入框异步校验的插件实现方法
2017/03/20 Javascript
详解Vue学习笔记入门篇之组件的内容分发(slot)
2017/07/17 Javascript
JScript实现表格的简单操作
2017/08/15 Javascript
详解Vue中数组和对象更改后视图不刷新的问题
2018/09/21 Javascript
面试题:react和vue的区别分析
2019/04/08 Javascript
taro开发微信小程序的实践
2019/05/21 Javascript
React 实现车牌键盘的示例代码
2019/12/20 Javascript
[09:22]2014DOTA2西雅图国际邀请赛 主赛事第二日TOPPLAY
2014/07/21 DOTA
[46:43]DOTA2上海特级锦标赛D组小组赛#1 EG VS COL第三局
2016/02/28 DOTA
[01:09]DOTAPLUS——DOTA2的新时代
2018/04/04 DOTA
[01:00:13]完美世界DOTA2联赛 LBZS vs Forest 第一场 11.07
2020/11/09 DOTA
Python中的groupby分组功能的实例代码
2018/07/11 Python
Django forms组件的使用教程
2018/10/08 Python
python使用列表的最佳方案
2020/08/12 Python
一款纯css3制作的2015年元旦雪人动画特效教程
2014/12/29 HTML / CSS
俄罗斯极限运动网上商店:Board Shop №1
2020/12/18 全球购物
java程序员面试交流
2012/11/29 面试题
总经理职责
2013/12/22 职场文书
中学生运动会口号
2014/06/07 职场文书
2014年班级工作总结
2014/11/14 职场文书
pytorch 实现变分自动编码器的操作
2021/05/24 Python
python Tkinter模块使用方法详解
2022/04/07 Python