class Animal(object):
def run(self):
print('Animal is running')
class Cat( Animal):
pass
class Dog(Animal):
pass
dog = Dog() #倘若直接执行Dog.run()为什么不行呢?
dog.run() #提示:run() missing 1 required positional argument: 'self'
#而且为什么isinstance(Dog, Animal)返回的是false,而isinstance(dog,Dog)返回的却是True呢?
基础不扎实,麻烦各位点拨一下,先谢谢啦。
因为
run(self)
方法的定义,这不是一个类方法或者静态方法所以需要以下调用
它有一个参数的,你比较一下
type(Dog.run)
和type(dog.run)
的结果可以看到两个类型不一样
Dog.run
是一个函数,它需要一个参数,dog.run
是一个方法,实际上是一个包装执行
dog.run()
就像Dog.run(dog)
,将dog
绑定到了self
参数上所以有
run() missing 1 required positional argument: 'self'
的错误第二个问题
isinstance(obj, cls)
顾名思义是判断对象是否是类的实例判断父类用
issubclass(cls, cls)