继承
关于继承,就是儿子获得了父亲的东西
# class Animal:
# 当没有写父类时,默认继承自object
class Animal(object):
def __init__(self, name):
self.name = name
def run(self):
print('小动物喜欢一天到晚跑个不停')
# 定义一个子类,继承自Animal
class Dog(Animal):
pass
d = Dog('旺财')
# 可以直接拥有父类的属性
print(d.name)
# 也拥有父类的行为
d.run()
派生
关于派生,就是儿子除了获取父亲拥有的所有的东西以外,还拥有独属于自己的东西,例:
class Animal:
def run(self):
print('一天到晚跑个不停')
class Cat(Animal):
def eat(self):
print('猫喜欢吃鱼')
在这里 子类Cat 继承了父类Animal的所有方法,但是eat这个方法是子类独有的,这就是派生
重写
关于重写,相当于儿子继承了父亲的一栋房子,这个时候儿子对这个房子会有集中情况:
- 某一间房子对他完全没有用,这个时候就需要把他推掉,重新盖一个对自己有用的了
class Animal:
def run(self):
print('小动物喜欢到处跑')
class Cat(Animal):
# 父类方法完全不合适,覆盖重写
def run(self):
print('猫喜欢走猫步')
就像这样,父类(Animal)中的run方法对子类(Cat)完全不合适,子类就将这个run方法覆盖重写
2. 某一间房子对他有用,但是还需要加一些东西才完美,这样就需要在原有的基础上加一点东西
class Animal:
def eat(self):
print('小动物喜欢吃东西')
class Cat(Animal):
# 父类的方法不够完善,需要添加完善
def eat(self):
# 保留父类方法的内容
# Animal.eat(self) # 不建议使用
# super(Cat, self).eat()
super().eat() # 推荐使用
# 添加完善的内容
print('猫喜欢吃鱼')
就像这样,父类(Animal)中的eat方法对子类(Cat)有用,但是子类还需要完善一点,在原父类方法的基础上继续加点东西使用
多继承
关于多继承,意思就是一个人可以继承多个人的东西。
class A:
def test(self):
print('in class A func test...')
class B:
def test(self):
print('in class B func test...')
def eat(self):
print('in class B func eat ...')
class C(A, B):
def eat(self):
# 默认的方式找父类,跟不重写方法时的顺序是一样的,
# 按照书写的先后顺序,默认是写在前面的类的方法
# super().eat()
# 明确指定调用哪个父类的方法
B.eat(self)
就像这样,一个类可以继承多个类,但是如果继承的这几个类中有相同方法名的方法时,会根据传入的先后顺序进行调用的,如果不想按顺序使用的话,需要在C这个类中新建一个相同的方法,在方法中特别指明调用的哪个父类的方法
作者:止语 ,转自 止语-编程学习分享 。 原文地址《Python面向对象学习(一)》