继承关系
继承(英语:inheritance)是面向对象软件技术当中的一个概念。如果一个类别A“继承自”另一个类别B,就把这个A称为“B的子类别”,而把B称为“A的父类别”也可以称“B是A的超类”。继承可以使得子类别具有父类别的各种属性和方法,而不需要再次编写相同的代码。在令子类别继承父类别的同时,可以重新定义某些属性,并重写某些方法,即覆盖父类别的原有属性和方法,使其获得与父类别不同的功能。另外,为子类别追加新的属性和方法也是常见的做法。
子类无任何属性和方法时,此时用的是父类的属性和方法
class Animal(object):
def __init__(self, name, age, sex):
self.name = name
self.age = age
self.sex = sex
def eat(self):
print("{}在吃饭".format(self.name))
class Person(Animal):
pass
p = Person(‘山山‘, 18, ‘男‘) # 此时Person类是没有定义任何东西,但是它直接可以使用父类的属性
print(p.name)
子类中有,但是父类没有的属性or方法时,优先使用子类的
class Animal(object):
def __init__(self, name, age, sex):
self.name = name
self.age = age
self.sex = sex
def eat(self):
print("{}在吃饭".format(self.name))
class Dog(Animal):
def __init__(self, name, age, sex, breed): # breed品种
self.name = name
self.age = age
self.sex = sex
self.breed = breed
def run(self):
print("这个{}品种的狗在跑".format(self.breed))
d = Dog(‘小黑‘, 2, ‘公‘, ‘京巴‘) # 此时父类中没有breed的属性,但是子类有,所以使用的是子类的属性
print(d.breed)
d.run()
子类中有,父类中也有相同名称的属性or方法,优先使用子类的(方法的重写)
class Animal(object):
def __init__(self, name, age, sex):
self.name = name
self.age = age
self.sex = sex
def eat(self):
print("{}在吃饭".format(self.name))
class Pig(Animal): # 完全重写父类的方法,此时只会用子类的
def __init__(self,breed) # 调用时只需要传入一个参数即可
self.breed = breed
class Person(Animal):
def eat(self):
print(‘这是Person类的方法‘)
pig = Pig(‘短尾猪‘)
print(pig.breed)
p = Person(‘山山‘, 18, ‘男‘) # 此时Person类是没有定义任何东西,但是它直接可以使用父类的属性
p.eat()
不想完全重写父类的方法,在子类中也使用父类的方法
# 此时想在子类中也应用父类的方法
# 方法一
class Pig(Animal):
def eat(self):
Animal.eat(self)
print(‘这个事Pig类的eat方法‘)
pig = Pig(‘猪猪‘,20,‘公‘)
pig.eat()
# 方法二
class Pig(Animal):
def eat(self):
super(Pig,self).eat() #使用super,格式super(子类名,self).方法
# super().eat()
print(‘这个事Pig类的eat方法‘)
pig = Pig(‘猪猪‘,20,‘公‘)
pig.eat()
不想完全重写父类的属性,在子类中也使用父类的属性
# 不完全重写父类的私有属性
# 方法一
class Pig(Animal):
def __init__(self,name,age,sex,breed):
Animal.__init__(self,name,age,sex)
self.breed = breed
def eat(self):
super(Pig,self).eat()
print(‘这个事Pig类的eat方法‘)
方法二
class Pig(Animal):
def __init__(self,name,age,sex,breed):
super(Pig,self).__init__(name,age,sex)
# super().__init__(name,age,sex)
self.breed = breed
def eat(self):
super(Pig,self).eat()
print(‘这个事Pig类的eat方法‘)
pig = Pig(‘猪猪‘,20,‘公‘,‘短尾猪‘)
print(pig.name)
print(pig.breed)
输出结果:
猪猪
短尾猪