在面向对象编程中,我们通过编写表示现实世界中的事物或场景的类,并基于这些类创建对象。在类中我们定义了一大类对象都有的通用行为,基于类创建对象时,每个类自动具备这种通用行为,然后可以根据需要赋予每个对象独特的个性。
根据类创建对象叫做实例化。
1、创建类
使用类几乎可以让我们模拟任何东西,下面编写一个表示餐厅的Restaurant类,它表示的不是特定的餐厅,而是任何餐厅。
class Restaurant(): def __int__(self, restaurant_name, cuisine_type): self.name = restaurant_name self.type = restaurant_type def describe_restaurant(self): print("This restaurant's name is " + self.name.title() +".")
print("This restaurant is " + self.type + "restaurant.") def open_restaurant(self): print("This restaurant is open now.")
实例化:first_restaurant = Restaurant('Peace Restaurant', Chinese)、second_restaurant = Restaurant('Summer', Italian)
访问属性:first_restaurant.name、second_restaurant.type
调用函数:first_restaurant.describe_restaurant()、second_restaurant.open_restaurant()
2、修改类中的属性值
我们创建一个Car类表示汽车,它存储了有关汽车的信息,还有一个汇总这些信息的方法,同时添加一个随时间变化的属性,用它存储汽车的总里程:
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_new_car = Car('audi', 'a4', 2016)
修改属性odometer_reading 的值,有以下两种方法可以实现:
①直接修改:my_new_car.odometer_reading = 23
②通过在类中定义函数,比如将里程表读数设置为指定值,还可以通过函数使读数增加一定的值:
def update_odometer(self, mileage): """将里程表读数设置为指定的值""" self.odometer_reading = mileage def increment_odometer(self, miles): """将里程表读数增加指定的量""" self.odometer_reading += miles
3、继承
编写类时,并非总是要从零开始,如果你要编写的类是另一个类的特殊版本,可以使用继承。一个类继承另一个类时,它将自动获得另一个类的所有属性和方法,原有的类叫父类,新类称为子类。当然,长江后浪推前浪,子类可以定义自己的属性和方法。
继承通过class 子类名(父类名): 的形式来实现,比如新建一个电动汽车类ElectricCar继承上面的Car类:
class ElectricCar(Car): """电动汽车的独特之处""" def__init__(self, make, model, year): """初始化父类的属性""" super().__init__(make, model, year)
super()是一个特殊函数,能够帮助Python将父类和子类关联起来。这行代码让Python调用父类的__init__(),使子类实例包含父类的所有属性。