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关键字and和or用法实例
May 28 Python
python实现用户登录系统
May 21 Python
Tensorflow实现卷积神经网络的详细代码
May 24 Python
对python requests发送json格式数据的实例详解
Dec 19 Python
pytorch打印网络结构的实例
Aug 19 Python
多版本python的pip 升级后, pip2 pip3 与python版本失配解决方法
Sep 11 Python
pycharm实现在子类中添加一个父类没有的属性
Mar 12 Python
Tensorflow tf.nn.depthwise_conv2d如何实现深度卷积的
Apr 20 Python
Python数据可视化实现漏斗图过程图解
Jul 20 Python
Python浮点型(float)运算结果不正确的解决方案
Sep 22 Python
Django中session进行权限管理的使用
Jul 09 Python
python之django路由和视图案例教程
Jul 26 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学习笔记之一
2011/01/17 PHP
php入门学习知识点二 PHP简单的分页过程与原理
2011/07/14 PHP
php登录超时检测功能实例详解
2017/03/21 PHP
PHP7数组的底层实现示例
2019/08/25 PHP
Javascript类库的顶层对象名用户体验分析
2010/10/24 Javascript
jQuery内置的AJAX功能和JSON的使用实例
2014/07/27 Javascript
node.js中的console.timeEnd方法使用说明
2014/12/09 Javascript
JavaScript中window.showModalDialog()用法详解
2014/12/18 Javascript
jQuery检测输入的字符串包含的中英文的数量
2015/04/17 Javascript
不想让浏览器运行javascript脚本的方法
2015/11/20 Javascript
jQuery+css实现的tab切换标签(兼容各浏览器)
2016/01/28 Javascript
jquery自适应布局的简单实例
2016/05/28 Javascript
AngularJS入门教程之与服务器(Ajax)交互操作示例【附完整demo源码下载】
2016/11/02 Javascript
JavaScript函数基础详解
2017/02/03 Javascript
jQuery实现菜单栏导航效果
2017/08/15 jQuery
关于Webpack dev server热加载失败的解决方法
2018/02/22 Javascript
Vue2.X 通过AJAX动态更新数据
2018/07/17 Javascript
详解jQuery如何实现模糊搜索
2019/05/10 jQuery
vue实现购物车的监听
2020/04/20 Javascript
JavaScript 绘制饼图的示例
2021/02/19 Javascript
浅谈python中的getattr函数 hasattr函数
2016/06/14 Python
Python实现一个简单的验证码程序
2017/11/03 Python
python timestamp和datetime之间转换详解
2017/12/11 Python
用Python下载一个网页保存为本地的HTML文件实例
2018/05/21 Python
Python中浅拷贝copy与深拷贝deepcopy的简单理解
2018/10/26 Python
对python的bytes类型数据split分割切片方法
2018/12/04 Python
在python带权重的列表中随机取值的方法
2019/01/23 Python
Python Flask框架模板操作实例分析
2019/05/03 Python
如何使用Python破解ZIP或RAR压缩文件密码
2020/01/09 Python
django中的数据库迁移的实现
2020/03/16 Python
浅析Python 序列化与反序列化
2020/08/05 Python
css3图片边框border-image的用法
2017/06/30 HTML / CSS
模范教师事迹材料
2014/12/16 职场文书
公司清洁工岗位职责
2015/04/15 职场文书
班级班风口号大全
2015/12/25 职场文书
Windows11插耳机没反应怎么办? win11耳机没声音的多种解决办法
2021/11/21 数码科技