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脚本判断 Linux 是否运行在虚拟机上
Apr 25 Python
Python读写ini文件的方法
May 28 Python
R vs. Python 数据分析中谁与争锋?
Oct 18 Python
Python多线程爬虫实战_爬取糗事百科段子的实例
Dec 15 Python
pygame实现简易飞机大战
Sep 11 Python
python环形单链表的约瑟夫问题详解
Sep 27 Python
python3 实现验证码图片切割的方法
Dec 07 Python
python自定义函数实现一个数的三次方计算方法
Jan 20 Python
详解用Python为直方图绘制拟合曲线的两种方法
Aug 21 Python
python机器学习实现决策树
Nov 11 Python
解决Tensorflow2.0 tf.keras.Model.load_weights() 报错处理问题
Jun 12 Python
Python开发之QT解决无边框界面拖动卡屏问题(附带源码)
May 27 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
Php部分常见问题总结
2006/10/09 PHP
CodeIgniter配置之routes.php用法实例分析
2016/01/19 PHP
PHP回调函数与匿名函数实例详解
2017/08/16 PHP
php获取目录下所有文件及目录(多种方法)(推荐)
2019/05/14 PHP
常用的javascript function代码
2008/05/23 Javascript
JavaScript DOM 学习第三章 内容表格
2010/02/19 Javascript
利用google提供的API(JavaScript接口)获取网站访问者IP地理位置的代码详解
2010/07/24 Javascript
JS动态获取当前时间,并写到特定的区域
2013/05/03 Javascript
高效率JavaScript编写技巧整理
2013/08/23 Javascript
一个简单的Node.js异步操作管理器分享
2014/04/29 Javascript
jQuery使用empty()方法删除元素及其所有子元素的方法
2015/03/26 Javascript
用js实现放大镜的效果的简单实例
2016/05/23 Javascript
JS简单实现浮动窗口效果示例
2016/09/07 Javascript
关于ES6的六个小特性(二)
2017/02/20 Javascript
Node.js实现文件上传的示例
2017/06/28 Javascript
基于JS对象创建常用方式及原理分析
2017/06/28 Javascript
checkbox:click事件触发span元素内容改变的方法
2017/09/11 Javascript
vue 通过下拉框组件学习vue中的父子通讯
2017/12/19 Javascript
Nodejs异步回调之异常处理实例分析
2018/06/22 NodeJs
Nodejs中使用puppeteer控制浏览器中视频播放功能
2019/08/26 NodeJs
详解node.js创建一个web服务器(Server)的详细步骤
2021/01/15 Javascript
pytyon 带有重复的全排列
2013/08/13 Python
用python + openpyxl处理excel2007文档思路以及心得
2014/07/14 Python
python 实现红包随机生成算法的简单实例
2017/01/04 Python
解决Django生产环境无法加载静态文件问题的解决
2019/04/23 Python
python实现输入任意一个大写字母生成金字塔的示例
2019/10/27 Python
Python Dict找出value大于某值或key大于某值的所有项方式
2020/06/05 Python
基于PyTorch的permute和reshape/view的区别介绍
2020/06/18 Python
Python编写单元测试代码实例
2020/09/10 Python
python实现图书馆抢座(自动预约)功能的示例代码
2020/09/29 Python
新护士岗前培训制度
2014/02/02 职场文书
学习党的群众路线教育实践活动心得体会
2014/03/01 职场文书
大学生应聘求职信
2014/05/26 职场文书
2015年前台接待工作总结
2015/05/04 职场文书
关于办理居住证的介绍信模板
2019/11/27 职场文书
HTML中的表单元素介绍
2022/02/28 HTML / CSS