首页 > temp > 简明python教程 >
-
Python语法基础(4)
创建子类时,父类必须包含在当前文件中,且位于子类的前面
给予类定义属性和方法
下面来添加一个电动车特有的属性(电瓶),以及一个描述该属性的方法。我们将存储电瓶容量,并编写一个打印电瓶描述的方法:
#来创建一个电动车的类
class ElectricCar(Car):
'''电动车独特的属性'''
def __init__(self,make,model,year):
'''
初始化父类的属性
初始化电动车特有的属性
'''
super().__init__(make,model,year)
self.battery_size = 70
def describe_battery(self):
'''打印一条信息来描述电瓶'''
print("这辆电瓶车有着"+ str(self.battery_size) + "容量的电池")
my_tesla = ElectricCar('tesla','model s',2016)
print(my_tesla.get_descriptive_name())
my_tesla.describe_battery()
2016 tesla model s
这辆电瓶车有着70容量的电池
重写父类的方法
对于父类的方法,只要它不符合子类模拟实物的行为,都可以对其进行重写。为此,可以在子类中定义一个这样的方法,即它与要重写的父类方法同名。这样,Python将不会考虑这个父类方法,而只关心你在子类中定义的相应方法:
假设Car类中有一个名为fill_gas_tank()的方法,它对电瓶车来说毫无意义,因此你想要重写它。下面演示了一种重写的方法。
class Car():
def fill_gas_tank(self):
'''为汽车增加尾气排放数值'''
print("该汽车的尾气排放量为"+ str(self.gas_tank) +"每公里")
~~~Python
class ElectricCar(Car):
def fill_gas_tank(self):
'''电动车没有油箱'''
print("电动车不会排除尾气")
my_tesla = ElectricCar('tesla','model s',2016)
print(my_tesla.get_descriptive_name())
my_tesla.describe_battery()
my_tesla.fill_gas_tank()
print("\n")
my_car = Car('本田','思域',2018)
my_car.fill_gas_tank()
~~~
2016 tesla model s
这辆电瓶车有着70容量的电池
电动车不会排除尾气
该汽车的尾气排放量为13每公里
将实例用作属性
使用代码模拟实物时,你可能会发现自己给类添加的细节越来越多:属性和方法清单以及文件都越来越长。在这种情况下,可能需要将类的一部分作为一个独立的类提取出来。你可以将大型类拆分成多个协同工作的小类。
例如,不断给ElectricCar类添加细节时,我们可能会发现其中包含很多专门针对汽车电瓶的属性和方法。在这种情况下,我们可将这些属性和方法提取出来,放到另一个专门名为Battery的类中,并将一个Battery实例用作ElectricCar类的一个属性:
class Car():
```Python
#来创建一个电瓶类
class Battery():
'''一次模拟电动汽车电瓶的简单尝试'''
def __init__(self,battery_size=70):
'''初始化电瓶的属性'''
self.battery_size = battery_size
def describe_battery(self):
'''打印一条描述电瓶的信息'''
print("这辆电动车的电瓶的容量是"+ str(self.battery_size))
#来创建一个电动车的类
class ElectricCar(Car):
'''电动车独特的属性'''
def __init__(self,make,model,year):
'''
初始化父类的属性
初始化电动车特有的属性
'''
super().__init__(make,model,year)
self.battery = Battery()
my_test = ElectricCar('tesla','model s',2016)
print(my_test.get_descriptive_name())
my_test.attery.describe_battery()
```
~~~Python
2016 tesla model s
这辆电动车的电瓶的容量是70
下面再给Battery添加一个方法,它根据电瓶容量报告汽车的续航里程:
class Battery():
'''一次模拟电动汽车电瓶的简单尝试'''
def __init__(self,battery_size=70):
'''初始化电瓶的属性'''
self.battery_size = battery_size
def describe_battery(self):
'''打印一条描述电瓶的信息'''
print("这辆电动车的电瓶的容量是"+ str(self.battery_size))
def get_range(self):
'''打印出一条信息,指出电瓶的续航里程'''
if self.battery_size == 70:
range = 240
elif self.battery_size == 85:
range = 270
message = "现在的电池容量能走"+str(range)+"KM 路程"
print(message)
#来创建一个电动车的类
class ElectricCar(Car):
'''电动车独特的属性'''
def __init__(self,make,model,year):
'''
初始化父类的属性
初始化电动车特有的属性
'''
super().__init__(make,model,year)
self.battery = Battery()
my_test = ElectricCar('tesla','model s',2016)
print(my_test.get_descriptive_name())
my_test.battery.describe_battery()
my_test.battery.get_range()
2016 tesla model s
这辆电动车的电瓶的容量是70
现在的电池容量能走240KM 路程
- 导入类
随着你不断地给类添加功能,文件可能变得很长,即便你妥善地使用了继承亦如此。为遵循python的总体理念,应让文件尽可能整洁。为在这方面提供帮助,python允许你将类存储在模块中,然后在主程序中导入所需的模块。
导入单个类
#encoding:utf-8
from Car import Car
my_new_car = Car('东风','日产',2022)
print(my_new_car.get_descriptive_name())
my_new_car.odometer_reading = 23
my_new_car.read_odometer()
2022 东风 日产
你的汽车已经行驶了23km!
在一个模块中存储多个类
现在可以新建一个名为my_electric_car.py的文件,导入ElectricCar类,并创建一辆电动汽车了:
#encoding:utf-8
from Car import ElectricCar
my_tesla = ElectricCar('tesla','model s',2016)
print(my_tesla.get_descriptive_name())
my_tesla.battery.describe_battery()
my_tesla.battery.get_range()
2016 tesla model s
这辆电动车的电瓶的容量是70
现在的电池容量能走240KM 路程