python实例方法调用类方法,python类名调用实例方法
Python的类体中定义的方法默认都是实例方法,实例方法通过对象调用。
但是提醒大家,Python的类很大程度上是一个命名空间。当一个程序在类体中定义变量和方法的时候,和前面介绍的变量和函数的定义没有太大的区别。比较以下代码:
#定义全局空间的foo函数
deffoo():
打印(“全局空间的foo方法”)
#全局空间的bar变量
bar=20
classBird:
#定义鸟空间的foo功能
deffoo():
打印(“鸟空间的foo方法”)
#定义鸟空间的条形变量
bar=200
#调用全局空间的函数和变量
foo()
打印(条形)
#调用鸟空间的函数和变量
Bird.foo()
上面print(Bird.bar)的代码分别在全局空间和Bird类(Bird space)定义了foo()函数和bar变量。从定义它们的代码来看,几乎没有区别,只是在Bird类中定义它们时需要缩进。
接下来,当程序在Bird space中调用bar变量和foo()函数(方法)时,只需要添加鸟即可。前缀,这意味着可以通过Bird类调用foo()函数(方法)。这就是这种调用实例方法的证明。
现在的问题是,如果用类调用实例方法,方法的第一个参数(self)如何自动绑定?例如,下面的程序:
classUser:
defwalk(self):
打印(自我,“慢慢走”)
#通过类调用实例方法
User.walk()运行上述代码,程序将报告以下错误:
Type:Walk () Missing1必选Positional Argument 3360 self 请查看程序的最后一行代码。对walk()方法的调用缺少传入的self参数,这导致了程序错误。这表明在用类调用实例方法时,Python不会自动绑定第一个参数的调用方。实际上是不能自动绑定的,所以实例方法的调用者是类本身,而不是对象。
如果程序仍然希望使用该类来调用实例方法,它必须手动传入该方法的第一个参数的参数值。例如,将上述粗体代码更改为以下形式:
u=用户()
#显式绑定该方法第一个参数的参数值
User.walk(u)这段代码为walk()方法的第一个参数显式绑定了参数值,这样调用的效果完全等同于执行u.walk()。
实际上,通过用户类调用walk()实例方法时,Python只需要为第一个参数手动绑定参数值,不需要绑定用户对象,所以也可以用下面的代码调用:
#为该方法的第一个参数显式绑定fkit字符串参数值。
User.walk(fkit )如果按上述方式绑定,则 fkit 字符串将被传递给walk()方法的第一个参数self。因此,如果您运行以上代码,您将看到以下输出:
Fkit在总结.慢慢走着
Python的类可以调用实例方法,但是使用类调用实例方法时,Python不会自动为方法的第一个参数self绑定参数值;程序必须为第一个参数self显式传入方法调用方。这种调用方法称为“未绑定方法”。
郑重声明:本文由网友发布,不代表盛行IT的观点,版权归原作者所有,仅为传播更多信息之目的,如有侵权请联系,我们将第一时间修改或删除,多谢。