什么是继承
继承是一种新建类的方式,新建的类称为子类,被继承的类称为父类
继承的特性
子类会遗传父类的属性
继承是类与类之间的关系
继承的优点
使用继承可以减少代码的冗余
注意:在Python3中如果一个类没有继承任何类,则默认继承object类,对象查找属性的顺序:对象本身 -> 对象的类 -> 父类
classCar():
def __init__(self,make,model,year):
self.make=make
self.model=model
self.year=year
self.odometer_reading= 0def get_descriptive_name(self):
long_name= str(self.year) + ' ' + self.make + ' ' +self.modelreturnlong_name.title()
def read_odometer(self):
print("This car has" + str(self.odometer_reading) + 'miles on it')
def upadte_odometer(self,mileage):
self.odometer_reading=mileage
def increment_odometer(self,miles):
self.odometer_reading+=milesclassElectricCar(Car):
def __init__(self,make,model,year):
super().__init__(make,model,year)
my_tesla= ElectricCar('tesla','model s',2019)
print(my_tesla.get_descriptive_name())
输出
2019 Tesla Model S
父类必须包含在当前文件中,且位于子类前面。创建一个子类ElectricCar(Car)继承父类Car,使用方法__init__()接受创建Car实例所需信息。使用super()函数将父类和子类关联起来。
给子类定义属性和方法
classCar():
def __init__(self,make,model,year):
self.make=make
self.model=model
self.year=year
self.odometer_reading= 0def get_descriptive_name(self):
long_name= str(self.year) + ' ' + self.make + ' ' +self.modelreturnlong_name.title()
def read_odometer(self):
print("This car has" + str(self.odometer_reading) + 'miles on it')
def upadte_odometer(self,mileage):
self.odometer_reading=mileage
def increment_odometer(self,miles):
self.odometer_reading+=milesclassElectricCar(Car):
def __init__(self,make,model,year):
super().__init__(make,model,year)
self.battery_size= 70def deescribe_battery(self):
print('This car has a' + str(self.battery_size) + '-kWh battery.')
my_tesla= ElectricCar('tesla','model s',2016)
print(my_tesla.get_descriptive_name())
my_tesla.deescribe_battery()
输出2016Tesla Model S
This car has a70-kWh battery.
添加新属性battery_size,初始值70,根据ElectricCar类创建的实例都包括,而Car的实例都不包括,又添加了describe_battery()方法,打印电瓶信息。如果一个属性或方法是任何汽车都有的那么应加入Car类,而不是ElectricCar类。
重写父类方法
如果父类不符合子类模拟的实物的行为,就需要进行重写
classBrid():
def isWing(self):
print('鸟有翅膀')
def fly(self):
print('鸟会飞')classOstrich(Brid):
def fly(self):
print('鸵鸟不会飞')
ostrich=Ostrich()
ostrich.fly()
输出
鸵鸟不会飞
定义鸟类,有两个属性:有翅膀、会飞。又定义了鸵鸟,但鸵鸟有翅膀不会飞。可以在子类鸵鸟类中重写父类鸟类的fly方法。
重写:有时又称覆盖,指对类中已有方法的内部实现进行修改。