Python类调用实例方法

通过前面的学习,类方法大体分为3类,分别是类方法、实例方法和静态方法,其中实例方法用的是最多的。我们知道,实例方法的调用方式其实有2种,既可以采用类对象调用,也可以直接通过类名调用。

通常情况下,我们习惯使用类对象调用类中的实例方法。但如果想用类调用实例方法,不能像如下这样:

class CLanguage:
 def info(self):
  print("我正在学 Python")#通过类名直接调用实例方法CLanguage.info()12345复制代码类型:[python]

运行上面代码,程序会报出如下错误:

Traceback (most recent call last):
  File "D:\python3.6\demo.py", line 5, in <module>
 CLanguage.info()
TypeError: info() missing 1 required positional argument: 'self'1234复制代码类型:[python]

其中,最后一行报错信息提示我们,调用info()类方式时缺少给self参数传参。这意味着,和使用类对象调用实例方法不同,通过类名直接调用实例方法时,Python并不会自动给self参数传值。

读者想想也应该明白,self参数需要的是方法的实际调用者(是类对象),而这里只提供了类名,当然无法自动传值。

因此,如果想通过类名直接调用实例方法,就必须手动为self参数传值。例如修改上面的代码为:

class CLanguage:
 def info(self):
  print("我正在学 Python")
clang = CLanguage()#通过类名直接调用实例方法CLanguage.info(clang)123456复制代码类型:[python]

再次运行程序,结果为:

我正在学 Python1复制代码类型:[python]

可以看到,通过手动将clang这个类对象传给了self参数,使得程序得以正确执行。实际上,这里调用实例方法的形式完全是等价于clang.info()。

值得一提的是,上面的报错信息只是让我们手动为self参数传值,但并没有规定必须传一个该类的对象,其实完全可以任意传入一个参数,例如:

class CLanguage:
 def info(self):
  print(self,"正在学 Python")#通过类名直接调用实例方法CLanguage.info("zhangsan")12345复制代码类型:[python]

运行结果为:

zhangsan 正在学 Python1复制代码类型:[python]

可以看到,"zhangsan"这个字符串传给了info()方法的self参数。显然,无论是info()方法中使用self参数调用其它类方法,还是使用self参数定义新的实例变量,胡乱的给self参数传参都将会导致程序运行崩溃。

总的来说,Python中允许使用类名直接调用实例方法,但必须手动为该方法的第一个self参数传递参数,这种调用方法的方式被称为“非绑定方法”。

用类的实例对象访问类成员的方式称为绑定方法,而用类名调用类成员的方式称为非绑定方法。

(0)

相关推荐

  • 60个Python小例子,建议收藏

    原文:https://github.com/jackzhenguo/python-small-examples 一. 数字 1 求绝对值 绝对值或复数的模 In [1]: abs(-6)Out[1]: ...

  • python类的继承

    目录 一.概述 二.类的继承 2.1 继承的定义 2.2 构造函数的继承 2.3 子类对父类方法的重写 三.类继承的事例 回到顶部 一.概述 面向对象编程 (OOP) 语言的一个主要功能就是" ...

  • python 类简述

    一个最简单的基本类如下: # -*- coding: utf-8 -*- class Sjtiqu(): def __init__(self,x): self.x=x def jibenmian(se ...

  • 第10天:Python 类与对象

    在刚接触编程时,我们就了解到编程界有两大思想:面向过程与面向对象,Python 就是一门面向对象的语言,如果你了解过面向对象的思想,自然就知道面向对象思想包含两个基本概念:类与对象 ,下面我们就一起详 ...

  • 面向对象: 理解python类的单继承与多继承

    俗话说"龙生龙凤生凤老鼠的孩子会打洞",每种动物都有各自的特性,比如 老鼠会打洞 猫会爬树 鲨鱼会游泳 不同种类有不同的天性.而在程序员的思维中,动物是对象, 天性是这个类方法或者 ...

  • Python如何调用系统命令?方法介绍!

    移动互联网技术的快速发展,为各大行业都提供了发展机遇,在市场的影响之下,Python语言变得更加火爆,渗透到各大领域,现在很多开发工作都会使用到Python,不过进行Python开发搭建框架的时候,往 ...

  • 说说Python类中的self参数?

    公众号新增加了一个栏目,就是每天给大家解答一道Python常见的面试题,反正每天不贪多,一天一题,正好合适,只希望这个面试栏目,给那些正在准备面试的同学,提供一点点帮助! 小猿会从最基础的面试题开始, ...

  • 使用Python接口调用yolov3和yolov4检测视频并保存检测视频

    cv2.putText(img, label, text_pos, cv2.FONT_HERSHEY_SIMPLEX, thickness / 3, [225, 255, 255], thicknes ...

  • Python类和对象

    Python 语言在设计之初,就定位为一门面向对象的编程语言,"Python 中一切皆对象"就是对 Python 这门编程语言的完美诠释. 类和对象是 Python 的重要特征,相 ...

  • Python如何调用RPC接口

    Python如何调用RPC接口是很多Python开发工程师比较关心的问题,本篇文章好程序员Python培训小编就给喜欢Python开发的小伙伴们分享一下Python调用RPC接口的详解,文中有详细的代 ...