在前面的学习中,我总结了python中的三种方法类型的,分别是实例方法、类方法和实例方法,可以参考文章从例子中来到例子中去-Python中的实例属性、类属性与实例方法、类方法、静态方法。
我们知道,实例对象可以调用这三种方法,而类对象只能调用类方法和实例方法,既然如此为何我们还要研究类对象调用实例方法呢?我们先看一个例子:
class Dog:
def action(self):
print("吃骨头")
#通过类名直接调用实例方法
Dog.action()
"""
上述代码执行的结果:
TypeError: action() missing 1 required positional argument: 'self'
"""
显然,程序会报错,但是我们观察一下报错的信息提示,即:调用的方法中没有给self传参数,slef就是我们对象的引用。
这个提示告诉了我们,之前在使用实例对象调用实例方法的时候,其实是python自动给self参数进行了传值,而使用Dog.action()的方式,我们只有类对象的引用,缺少实例对象的引用,python不能够实现自动的传递了。
因此,我们可以根据提示传递一个实例对象的引用,进行手动操作,我们修改一下代码,来验证这样的思想是否正确:
class Dog:
def action(self):
print("吃骨头")
dog = Dog()
Dog.action(dog)
"""
上述代码执行的结果:
吃骨头
"""
从结果可以看到python是允许类名直接调用实例方法的。
总结
通常情况下,我们都是使用类的实例对象调用类中的实例方法的,如果想使用类名进行调用,需要手动给该实例方法传递实例对象的引用。