一、子类的方法__init__()
创建子类实例时,python首先需要完成的任务是给父类的所有属性赋值。为此子类的方法__init__()需要父类施以援手。
例如下面模拟电工汽车,电动汽车是一种特殊的汽车,因此我们需要在前面创建的Car类的基础上创建新的类ElectricCar.
class Car():
--snip--
class ElectricCar(Car):
def __init__(self,make,model,year):
"""初始化父类的属性"""
super().__init__(make,model,year)
my_tesla = ElectricCar('tesla','model s',2016)
print(my_tesla.get_descriptive_name())
创建子类时,必须包含父类在当前文件中,且位于子类前面。
定义子类时,必须在括号内指定父类的名称。方法__init__()接受创建实例所需的信息
super()是一个特殊的函数,帮助python将父类和子类关联起来。这行代码让python调用ElectricCar父类的方法__init__(),让ElectricCar实例包含父类的所有属性。父类也称为超类(superclass)
二、给子类定义属性和方法
让一个类继承一个类后,可以添加区分子类和父类所需的新属性和方法
class Car():
--snip--
class ElectricCar(Car):
def __init__(self,make,model,year):
super().__init__(make,model,year)
self.battery_size = 70
def describe_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.describr_battery()
三、重写父类方法
对于父类的方法,只要他不符合子类模拟的实物的行为,都可对其进行重写。为此可在子类中定义一个这样的方法,即他要与需要重写的父类方法同名。这样python将不会考虑这个父类的方法,而只关注你在子类中定义的相应方法。
四、将实例用作属性
class Car():
--snip--
1.class Battery():
2.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)
3.self.battery = Battery()
my_tesla = ElectricCar('tesla','model s',2016)
print(my_tesla.get_descriptive_name())
my_tesla.battery.describe_battery()
1处定义一个名为Battery的新类,他没有继承任何类。
2处的方法__init__()除self外,还有另一个形参battery_size。这个形参是可选的:如果没给他提供值,电瓶容量将被设置为70
3处添加一个名为self.battery的属性。这行代码让Python创建一个新的Battery实例,并将该实例存储在属性self.battery中