如果你要编写的类是另一个现成类的特殊版本,可使用 继承
。一个类
继承
另一个类时,它将自动获得另一个类的所有属性和方法;原有的类称为
父类, 而新类称为
子类
。子类继承了其父类的所有属性和方法,同时还可以定义自己的属性和方法。
使用继承时需要特别注意的点有:
- 创建子类时,父类必须包含在当前文件中,且位于子类前面;
- 需要使用super()这个特殊函数,帮助Python将父类和子类关联起来(父类也称为超类(superclass),名称super因此而得名。);
class 父类():
def __init__(self,形参1,形参2,形参3):
--snip--
class 子类():
def __init__(self,形参1,形参2,形参3):
super().__init__(形参1,形参2,形参3)
重写父类的方法:
在子类中定义一个这样的方法,即它与要重写的父类方法同名。这样,Python将不会考虑这个父类方法,而只关注你在子类中定义的相应方法。(大白话说就是写一个名称一样的方法,这样python就会只关注你新写的方法,而不关注父类的方法)
解决类中属性和方法过多,即模拟实物的过程中需要添加的细节越来越多的方法:
可以将类的一部分作为一个独立的类提取出来,可以将大型类拆分成多个协同工作的小类。
例如,不断给ElectricCar类(电动汽车,作为汽车的子类)添加细节时,我们可能会发现其中包含很多专门针对汽车电瓶的属性和方法。在这种情况下,我们可将这些属性和方法提取出来,放到另一个名为
Battery的类中,并将一个
Battery
实例用作ElectricCar类的一个属性
class Car():
--snip--
class Battery():
"""一次模拟电动汽车电瓶的简单尝试"""
def __init__(self, battery_size=70):
"""初始化电瓶的属性"""
self.battery_size = battery_size
def describe_battery(self):
"""打印一条描述电瓶容量的消息"""
print("This car has a " + str(self.battery_size) + "-kWh battery.")
class ElectricCar(Car):
"""电动汽车的独特之处"""
def __init__(self, make, model, year):
"""
初始化父类的属性,再初始化电动汽车特有的属性
"""
super().__init__(make, model, year)
self.battery = Battery()
my_tesla = ElectricCar('tesla', 'model s', 2016)
print(my_tesla.get_descriptive_name())
my_tesla.battery.describe_battery()