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简单获取自身外网IP的方法
Sep 18 Python
python简单实例训练(21~30)
Nov 15 Python
Python cookbook(数据结构与算法)找到最大或最小的N个元素实现方法示例
Feb 13 Python
Python中最大递归深度值的探讨
Mar 05 Python
关于Python作用域自学总结
Jun 10 Python
python装饰器原理与用法深入详解
Dec 19 Python
Django 多对多字段的更新和插入数据实例
Mar 31 Python
Python使用Pyqt5实现简易浏览器(最新版本测试过)
Apr 27 Python
python使用for...else跳出双层嵌套循环的方法实例
May 17 Python
Python下使用Trackbar实现绘图板
Oct 27 Python
Python的信号库Blinker用法详解
Dec 31 Python
python实现网络五子棋
Apr 11 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
PHPWind与Discuz截取字符函数substrs与cutstr性能比较
2011/12/05 PHP
PHP 文本文章分页代码 按标记或长度(不涉及数据库)
2012/06/07 PHP
PHP基于CURL进行POST数据上传实例
2014/11/10 PHP
javascript实现日期格式转换
2014/12/16 Javascript
使用jquery动态加载js文件的方法
2014/12/24 Javascript
Js为表单动态添加节点内容的方法
2015/02/10 Javascript
JS中prototype的用法实例分析
2015/03/19 Javascript
JavaScript中pop()方法的使用教程
2015/06/09 Javascript
JavaScript encodeURI 和encodeURIComponent
2015/12/04 Javascript
分步解析JavaScript实现tab选项卡自动切换功能
2016/01/25 Javascript
动态加载JavaScript文件的两种方法
2016/04/22 Javascript
Javascript之String对象详解
2016/06/08 Javascript
原生JS+Canvas实现五子棋游戏
2020/05/28 Javascript
react.js使用webpack搭配环境的入门教程
2017/08/14 Javascript
vue组件实现文字居中对齐的方法
2017/08/23 Javascript
关于layui的动态图标不显示的解决方法
2019/09/04 Javascript
vue语法自动转typescript(解放双手)
2019/09/18 Javascript
解决Vue.js应用回退或刷新界面时提示用户保存修改问题
2019/11/24 Javascript
详解Python3.6的py文件打包生成exe
2018/07/13 Python
python实现电子产品商店
2019/02/26 Python
Django基础知识 URL路由系统详解
2019/07/18 Python
使用 Python 快速实现 HTTP 和 FTP 服务器的方法
2019/07/22 Python
详解python uiautomator2 watcher的使用方法
2019/09/09 Python
django中间键重定向实例方法
2019/11/10 Python
python实现一个猜拳游戏
2020/04/05 Python
Django框架获取form表单数据方式总结
2020/04/22 Python
HTML5为输入框添加语音输入功能的实现方法
2017/02/06 HTML / CSS
铁路工务反思材料
2014/02/07 职场文书
汽车维修工岗位职责
2014/02/12 职场文书
《梅兰芳学艺》教学反思
2014/02/24 职场文书
软件部经理岗位职责范本
2014/02/25 职场文书
平安家庭示范户事迹
2014/06/02 职场文书
生活委员竞选稿
2015/11/21 职场文书
跟班学习心得体会(共6篇)
2016/01/23 职场文书
Python实现打乒乓小游戏
2021/09/25 Python
分享一个vue实现的记事本功能案例
2022/04/11 Vue.js