知行编程网知行编程网  2022-11-18 20:00 知行编程网 隐藏边栏  4 
文章评分 0 次,平均分 0.0
导语: 本文主要介绍了关于Python类调用实例方法的相关知识,希望可以帮到处于编程学习途中的小伙伴

Python类调用实例方法

Python类体中定义的方法默认为实例方法,通过对象调用实例方法。

但需要提醒的是,Python 的类在很大程度上是一个命名空间。当程序在类体中定义变量和方法时,与上面描述的变量和函数的定义没有太大区别。比较以下代码:

# 定义全局空间的foo函数
def foo ():
    print("全局空间的foo方法")
# 全局空间的bar变量
bar = 20
class Bird:
    # 定义Bird空间的foo函数
    def foo():
        print("Bird空间的foo方法")
    # 定义Bird空间的bar变量
    bar = 200
# 调用全局空间的函数和变量
foo()
print(bar)
# 调用Bird空间的函数和变量
Bird.foo()
print(Bird.bar)

上面的代码分别定义了全局空间和Bird类(Bird空间)中的foo()函数和bar变量。从定义它们的代码来看,几乎没有区别,只是在 Bird 类中定义它们时需要缩进。

接下来,当程序在Bird空间中调用bar变量和foo()函数(方法)时,只需要添加Bird即可。前缀,表示可以完全通过Bird类调用foo()函数(方法)。这证明该类调用了实例方法。

现在的问题是,如果使用类调用实例方法,如何自动绑定方法的第一个参数(self)?例如下面的程序:

class User:
    def walk (self):
        print(self, '正在慢慢地走')
# 通过类调用实例方法
User.walk()

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

TypeError: walk() missing 1 required positional argument:'self'

请看程序最后一行代码,对walk()方法的调用缺少传入的self参数,所以程序失败。这意味着当使用类调用实例方法时,Python 不会自动为第一个参数绑定调用者。实际上并没有自动绑定,所以实例方法的调用者是类本身,而不是对象。

如果程序还想用类调用实例方法,就必须手动传入方法第一个参数的参数值。例如,将上面的粗体代码更改为如下所示:

u = User()
# 显式为方法的第一个参数绑定参数值
User.walk(u)

这段代码将参数值显式绑定到 walk() 方法的第一个参数,这与执行 u.walk() 完全相同。

实际上,通过User类调用walk()实例方法时,Python只需要手动绑定第一个参数的参数值,不需要绑定User对象,所以也可以使用如下代码调用:

# 显式为方法的第一个参数绑定fkit字符串参数值
User.walk('fkit')

如果如上绑定,'fkit' 字符串将被传递给 walk() 方法的第一个参数 self。因此,运行上述代码,你将看到以下输出:

fkit 正在慢慢地走


总结

Python类可以调用实例方法,但是当使用类调用实例方法时,Python不会自动为方法的第一个参数self绑定参数值;程序必须显式传入第一个参数 self 的方法调用者。这种调用方式称为“未绑定方法”。

本文为原创文章,版权归所有,欢迎分享本文,转载请保留出处!

知行编程网
知行编程网 关注:1    粉丝:1
这个人很懒,什么都没写
扫一扫二维码分享