1.子类的方法__init__()
一个类继承另一个类时,他将自动获得另一个类的所有属性和方法。原有的类称为父类,而新类称为子类。子类继承其父类的所有属性和方法,同时还可以定义自己的属性和方法。
创建子类时,父类必须包含在当前文件中,且位于子类前面
定义子类时,必须在括号内指定父类的名称。
class Car(object):
"""docstring for Car"""
def __init__(self, make, model, year):
self.make = make
self.model = model
self.year = year
self.reading = 0
def get_name(self):
long_name = str(self.year) + ' ' + self.make + ' ' + self.model
return long_name.title()
def read_odometer(self):
print(str(self.reading))
def updata_odometer(self, mileage):
self.reading = mileage
def increment_odometer(self, miles):
self.reading += miles
my_car = Car('audi', 'a4', 2016)
print(my_car.get_name())
my_car.reading = 23
my_car.read_odometer()
my_car.updata_odometer(66)
my_car.read_odometer()
my_car.increment_odometer(33)
my_car.read_odometer()
class ElectricCar(Car):
"""docstring for ElectricCar"""
def __init__(self, make, model, year):
'''初始化父类的属性'''
super(ElectricCar, self).__init__(make, model, year)
#self.arg = arg
my_tesla = ElectricCar('tesla', 'model s', 2016)
print(my_tesla.get_name())
Result:
2016 Tesla Model S
对于Python 2.7 中的继承来说,函数super()需要两个实参:子类名和对象self。我目前使用的编译器为Sublime Text 3,加不加这两个参数都可正常运行。
2.给定子类定义属性和方法
让一个子类继承另一个类后,可添加区分子类和父类所需的新属性和方法
class ElectricCar(Car):
"""docstring for ElectricCar"""
def __init__(self, make, model, year):
'''初始化父类的属性'''
super().__init__(make, model, year)
#self.arg = arg
self.battery = 40
def describe_battery(self):
print("This car has a " + str(self.battery) + "-KWh battery")
my_tesla = ElectricCar('tesla', 'model s', 2016)
my_tesla.describe_battery()
print(my_tesla.get_name())
Result:
This car has a 40-KWh battery
113.重写父类方法
对于父类的方法,只要它不符合子类模拟的实物的行为,都可以对其进行重写。重写的方法要与父类方法同名,当你再调用该方法时,Python只关心子类中定义的相应方法。
4.将实例用作属性
class ElectricCar(Car):
"""docstring for ElectricCar"""
def __init__(self, make, model, year):
'''初始化父类的属性'''
super().__init__(make, model, year)
#self.arg = arg
self.battery = Battery()
#def describe_battery(self):
#print("This car has a " + str(self.battery) + "-KWh battery")
my_tesla = ElectricCar('tesla', 'model s', 2016)
my_tesla.battery.describe_battery()
print(my_tesla.get_name())
Result:
This car has a 40-KWh battery
2016 Tesla Model S