一、创建和使用类
1.创建Car类
car.py
class Car():
"""一次模拟汽车的简单尝试"""
def __init__(self, make, model, year):
"""初始化描述汽车的属性"""
self.make = make
self.model = model
self.year = year
def get_descriptive_name(self):
"""返回整洁的描述性信息"""
long_name = str(self.year) + ' ' + self.make + ' ' + self.model
return long_name.title()
my_new_car = Car('audi', 'a4', 2016)
print(my_new_car.get_descriptive_name())
给属性制定默认值时,可在方法_init_()中制定,且无需包含为它提供初始值的形参。
下面添加一个名为odometer_reading的属性,其初始值为0。
def __init__(self, make, model, year):
"""初始化描述汽车的属性"""
self.make = make
self.model = model
self.year = year
self.odometer_reading = 0
二、继承
1.声明一个电动汽车ElectricCar类,继承汽车Car类。
创建子类的实例时,Python首先需要完成的任务是给父类的所有属性赋值。为此,子类的方法_init_()需要父类帮忙。
electric_car.py
class Car():
"""一次模拟汽车的简单尝试"""
def __init__(self, make, model, year):
"""初始化描述汽车的属性"""
self.make = make
self.model = model
self.year = year
self.odometer_reading = 0
def get_descriptive_name(self):
"""返回整洁的描述性信息"""
long_name = str(self.year) + ' ' + self.make + ' ' + self.model
return long_name.title()
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_()接受创建Car实例所需的信息。
2.给子类定义属性和方法
下面来添加电动汽车特有的属性(电瓶),以及一个描述该属性的方法。
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.")
3.将实例用作属性
把汽车电瓶的属性和方法提取出来,放到一个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)
"""把一个Battery的实例作为属性"""
self.battery = Battery()
my_tesla = ElectricCar('tesla', 'model s', 2016)
print(my_tesla.get_descriptive_name())
my_tesla.battery.describe_battery()
要描述电瓶时,需要使用电动汽车的属性battery:my_tesla.battery.describe_battery()
三、导入类
1.导入单个类
将Car类存储在一个名为car.py的模块中,创建另一个文件——my_car.py,在其中导入Car类并创建其实例:
car.py
class Car():
"""一次模拟汽车的简单尝试"""
def __init__(self, make, model, year):
"""初始化描述汽车的属性"""
self.make = make
self.model = model
self.year = year
self.odometer_reading = 0
def get_descriptive_name(self):
"""返回整洁的描述性信息"""
long_name = str(self.year) + ' ' + self.make + ' ' + self.model
return long_name.title()
def read_odometer(self):
print("This car has " + str(self.odometer_reading) + " miles on it.")
my_car.py
from car import Car
my_new_car = Car('audi', 'a4', 2016)
print(my_new_car.get_descriptive_name())
my_new_car.odometer_reading = 23
print(my_new_car.odometer_reading)
my_new_car.read_odometer()
2.在一个模块中存储多个类
可根据需要在一个模块中存储任意数量的类,类Battery和ElectricCar都可以帮助模拟汽车,因此把他们都加入到car.py。
car.py
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)
"""把一个Battery的实例作为属性"""
self.battery = Battery()
3.从一个模块中导入多个类
如果要在同一个程序中创建普通汽车和电动汽车,就需要把Car和ElectricCar类都导入:
my_car.py
from car import Car, ElectricCar
my_beetle = Car('volkswagen', 'beetle', 2016)
print(my_beetle.get_descriptive_name())
my_tesla = ElectricCar('tesla', 'roadster', 2016)
print(my_tesla.get_descriptive_name())
4.导入整个模块
如果导入整个模块,再使用句点表示法访问需要的类。
my_car.py
import car
my_beetle = car.Car('volkswagen', 'beetle', 2016)
print(my_beetle.get_descriptive_name())
my_tesla = car.ElectricCar('tesla', 'roadster', 2016)
print(my_tesla.get_descriptive_name())