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计算两个日期相差天数的方法示例
May 23 Python
Django如何实现内容缓存示例详解
Sep 24 Python
python向已存在的excel中新增表,不覆盖原数据的实例
May 02 Python
在双python下设置python3为默认的方法
Oct 31 Python
Python获取航线信息并且制作成图的讲解
Jan 03 Python
详解用python实现基本的学生管理系统(文件存储版)(python3)
Apr 25 Python
调整Jupyter notebook的启动目录操作
Apr 10 Python
python实时监控logstash日志代码
Apr 27 Python
python TCP包注入方式
May 05 Python
Python3爬虫关于代理池的维护详解
Jul 30 Python
详解numpy1.19.4与python3.9版本冲突解决
Dec 15 Python
Python+OpenCV实现图片中的圆形检测
Apr 07 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你的验证码安全码?
2007/01/02 PHP
php获取mysql版本的几种方法小结
2008/03/25 PHP
php递归方法实现无限分类实例代码
2014/02/28 PHP
Thinkphp中数据按分类嵌套循环实现方法
2014/10/30 PHP
php 广告点击统计代码(php+mysql)
2018/02/21 PHP
PHP中用Trait封装单例模式的实现
2019/12/18 PHP
php将字符串转换为数组实例讲解
2020/05/05 PHP
js判断浏览器的比较全的代码
2007/02/13 Javascript
(转载)JavaScript中匿名函数,函数直接量和闭包
2007/05/08 Javascript
输入密码检测大写是否锁定js实现代码
2012/12/03 Javascript
浅析AngularJs HTTP响应拦截器
2015/12/28 Javascript
jQuery实现的兼容性浮动层示例
2016/08/02 Javascript
微信小程序 toast 详解及实例代码
2016/11/09 Javascript
详解webpack分离css单独打包
2017/06/21 Javascript
Javascript ES6中对象类型Sets的介绍与使用详解
2017/07/17 Javascript
Vue中如何实现轮播图的示例代码
2017/07/27 Javascript
浅谈Vue SPA 首屏加载优化实践
2017/12/15 Javascript
基于vue-cli vue-router搭建底部导航栏移动前端项目
2018/02/28 Javascript
微信头像地址失效踩坑记附带解决方案
2019/09/23 Javascript
解决vant title-active-color与title-inactive-color不生效问题
2020/11/03 Javascript
[48:37]EG vs OG 2018国际邀请赛小组赛BO2 第一场 8.17
2018/08/18 DOTA
python随机生成指定长度密码的方法
2015/04/04 Python
Python中的列表生成式与生成器学习教程
2016/03/13 Python
pytorch中tensor张量数据类型的转化方式
2019/12/31 Python
python3中sys.argv的实例用法
2020/04/24 Python
Django DRF APIView源码运行流程详解
2020/08/17 Python
python 读取串口数据的示例
2020/11/09 Python
Python监听剪切板实现方法代码实例
2020/11/11 Python
python反爬虫方法的优缺点分析
2020/11/25 Python
欧洲最大的美妆零售网站:Feelunique
2017/01/14 全球购物
英国广泛的照明产品网站:Lights4living
2018/01/28 全球购物
见习期自我鉴定
2013/11/07 职场文书
小学生纪念九一八事变演讲稿
2014/09/14 职场文书
正规借条模板
2015/05/26 职场文书
mybatis3中@SelectProvider传递参数方式
2021/08/04 Java/Android
pnpm对npm及yarn降维打击详解
2022/08/05 Javascript