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 相关文章推荐
详解Django中的ifequal和ifnotequal标签使用
Jul 16 Python
分享一个简单的python读写文件脚本
Nov 25 Python
Python利用turtle库绘制彩虹代码示例
Dec 20 Python
python读取几个G的csv文件方法
Jan 07 Python
python浪漫表白源码
Apr 05 Python
Python之Numpy的超实用基础详细教程
Oct 23 Python
python中的RSA加密与解密实例解析
Nov 18 Python
Python实现数值积分方式
Nov 20 Python
Python Gluon参数和模块命名操作教程
Dec 18 Python
Python chardet库识别编码原理解析
Feb 18 Python
详解Python3.8+PyQt5+pyqt5-tools+Pycharm配置详细教程
Nov 02 Python
使用Python爬取小姐姐图片(beautifulsoup法)
Feb 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
德生H-501的评价与改造
2021/03/02 无线电
PHP用身份证号获取星座和生肖的方法
2013/11/07 PHP
html读出文本文件内容
2007/01/22 Javascript
JavaScript 笔记二 Array和Date对象方法
2010/05/22 Javascript
jQuery获取对象简单实现方法小结
2014/10/30 Javascript
JavaScript数据结构之二叉树的计数算法示例
2017/04/13 Javascript
配置nodejs环境的方法
2017/05/13 NodeJs
用js屏蔽被http劫持的浮动广告实现方法
2017/08/10 Javascript
javaScript实现鼠标在文字上悬浮时弹出悬浮层效果
2020/04/12 Javascript
JS实现json对象数组按对象属性排序操作示例
2018/05/18 Javascript
基于Vue自定义指令实现按钮级权限控制思路详解
2018/05/23 Javascript
详解js创建对象的几种方法及继承
2019/04/12 Javascript
node解析修改nginx配置文件操作实例分析
2019/11/06 Javascript
详解Vue中的自定义指令
2020/12/07 Vue.js
[18:32]DOTA2 HEROS教学视频教你分分钟做大人-谜团
2014/06/12 DOTA
[01:33:30]DOTA2-DPC中国联赛 正赛 RNG vs Phoenix BO3 第二场 2月5日
2021/03/11 DOTA
Python 获取新浪微博的最新公共微博实例分享
2014/07/03 Python
Python lambda和Python def区别分析
2014/11/30 Python
Python编程中运用闭包时所需要注意的一些地方
2015/05/02 Python
Python cx_freeze打包工具处理问题思路及解决办法
2016/02/13 Python
解决Python requests 报错方法集锦
2017/03/19 Python
python中判断文件编码的chardet(实例讲解)
2017/12/21 Python
numpy中的ndarray方法和属性详解
2019/05/27 Python
python如何从文件读取数据及解析
2019/09/19 Python
pandas DataFrame 数据选取,修改,切片的实现
2020/04/24 Python
Django如何使用redis作为缓存
2020/05/21 Python
pytorch加载自己的图像数据集实例
2020/07/07 Python
Python自动化操作实现图例绘制
2020/07/09 Python
python实现一个简单RPC框架的示例
2020/10/28 Python
Pytorch实验常用代码段汇总
2020/11/19 Python
运动会通讯稿50字
2014/01/30 职场文书
三查三看党性分析材料
2014/02/18 职场文书
《假如》教学反思
2014/04/17 职场文书
机械机修工岗位职责
2014/08/03 职场文书
金榜题名主持词
2015/07/02 职场文书
Python中的matplotlib绘制百分比堆叠柱状图,并为每一个类别设置不同的填充图案
2022/04/20 Python