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基础教程之序列详解
Aug 29 Python
python读取一个目录下所有txt里面的内容方法
Jun 23 Python
django框架自定义用户表操作示例
Aug 07 Python
python RabbitMQ 使用详细介绍(小结)
Nov 08 Python
用Python写一个自动木马程序
Sep 17 Python
Python脚本操作Excel实现批量替换功能
Nov 20 Python
windows环境中利用celery实现简单任务队列过程解析
Nov 29 Python
解决Django提交表单报错:CSRF token missing or incorrect的问题
Mar 13 Python
python自动下载图片的方法示例
Mar 25 Python
python实现简单坦克大战
Mar 27 Python
详解pandas绘制矩阵散点图(scatter_matrix)的方法
Apr 23 Python
python机器学习实现oneR算法(以鸢尾data为例)
Mar 03 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快速url重写更新版[需php 5.30以上]
2010/04/25 PHP
php 操作数组(合并,拆分,追加,查找,删除等)
2012/07/20 PHP
php命令行(cli)下执行PHP脚本文件的相对路径的问题解决方法
2015/05/25 PHP
php实现的操作excel类详解
2016/01/15 PHP
php设计模式之职责链模式定义与用法经典示例
2019/09/19 PHP
Yii2框架中一些折磨人的坑
2019/12/15 PHP
jquery提取元素里的纯文本不包含span等里的内容
2013/09/30 Javascript
js对象转json数组的简单实现案例
2014/02/28 Javascript
extjs每个组件要设置唯一的ID否则会出错
2014/06/15 Javascript
Jquery效果大全之制作电脑健康体检得分特效附源码下载
2015/11/02 Javascript
JS操作xml对象转换为Json对象示例
2017/03/25 Javascript
AngularJS前端页面操作之用户修改密码功能示例
2017/03/27 Javascript
[01:02:10]DOTA2上海特级锦标赛B组小组赛#2 VG VS Fnatic第一局
2016/02/26 DOTA
[02:17]2016完美“圣”典风云人物:Sccc专访
2016/12/03 DOTA
浅谈Python的异常处理
2016/06/19 Python
基于python爬虫数据处理(详解)
2017/06/10 Python
Python基于pyCUDA实现GPU加速并行计算功能入门教程
2018/06/19 Python
详解DeBug Python神级工具PySnooper
2019/07/03 Python
Python Pickle 实现在同一个文件中序列化多个对象
2019/12/30 Python
TensorFlow内存管理bfc算法实例
2020/02/03 Python
Pytorch使用PIL和Numpy将单张图片转为Pytorch张量方式
2020/05/25 Python
CSS3系列教程:背景图片(背景大小和多背景图) 应用说明
2012/12/19 HTML / CSS
利用纯CSS3实现动态的自行车特效源码
2017/01/20 HTML / CSS
ALDO加拿大官网:加拿大女鞋品牌
2018/12/22 全球购物
如何开发一个JQuery插件
2016/07/28 面试题
体育老师的教学自我评价分享
2013/11/19 职场文书
升职自荐书范文
2013/11/28 职场文书
优秀本科生求职推荐信
2014/02/24 职场文书
《美丽的小兴安岭》教学反思
2014/02/26 职场文书
读书活动总结
2014/04/28 职场文书
绿色环保演讲稿
2014/05/10 职场文书
竞选班干部演讲稿400字
2014/08/20 职场文书
2014年作风建设心得体会
2014/10/22 职场文书
五年级小学生评语
2014/12/26 职场文书
2015暑期社会实践通讯稿
2015/07/18 职场文书
小喇叭开始广播了! 四十多年前珍贵老照片
2022/05/09 无线电