面向对象编程,编写表示现实世界中的食物和情景的类,并基于这些类来创建对象。 基于类创建对象被称为实例化,每个对象都自动具备这种通用行为,可以根据需要赋予每个对象独特的特性。
类中的函数称为方法 方法__init()__是一个特殊的方法,根据Dog类创建新实例时,python都会自动运行它,并自动传入实参self。 每个与类相关联的方法都自动传递实参self,它是一个指向实例本身的引用,让实例可以访问类中属性和方法。 根据Dog类创建实例时,只需要给后两个形参name,age提供值。
首字母大写的名称指的是类,小写的名称指的是根据类创建的实例。
访问属性 句点表示法,my_dog.name 调用方法 my_dog.sit()
直接修改属性的值 通过实例直接访问它:
my_new_car.odometer_reading=23 my_new_car.read_odometer() This car has 23 miles on it.通过方法修改属性的值 在类定义里添加update_odometer()方法
def update_odometer(self,mileage): """将里程表读数设置为指定的值""" self.odometer_reading = mileage my_new_car.update_odometer(23) my_new_car.read_odometer() This car has 23 miles on it.在类的定义里增加increment_odometer()方法
def increment_odometer(self,miles): """将里程表读数增加指定的量""" self.odometer_reading += miles my_new_car = Car('audi','a4',2016) my_new_car.read_odometer() my_new_car.update_odometer(50) my_new_car.increment_odometer(30) my_new_car.read_odometer() This car has 0 miles on it. This car has 80 miles on it.一个类继承另一个类时,它将自动获得另一个类的所有属性和方法,原有的类成为父类,而新类称为子类。 子类继承了父类所有的属性和方法,还可以定义自己的属性和方法。
class Electric(Car): def __init__(self,make,model,year): """初始化父类的属性""" super().__init__(make,model,year) my_tesla=Electric('tesla','model s',2016) print(my_tesla.get_descriptive_name()) 2016 Tesla Model S创建子类时,父类必须包括在当前文件中,且位于子类前面。
方法__init__()接受创建Car实例所需的信息。
super()是一个特殊函数,帮助父类和子类关联起来,这行代码让子类实例包含父类的所有属性。 父类也称为超类(superclass)。
若父类的方法不符合子类模拟的实物的行为,可以在子类中定义这样一个方法,只要它与重写的父类方法同名。 python将不会考虑这个父类方法,只关注在子类中定义的相应方法。
self.battery = Battery()在ElectricCar类中添加了一个self.battery属性,创建了一个新的Battery实例,并将该实例存储在属性self.battery中。
将car类存储在一个名为car.py的模块中。 导入单个类
from car import Car在一个模块中存储多个类 类Battery和类ElectricCar在模块car.py中
from car import ElectricCar从一个模块导入多个类
from car import Battery,ElectricCar导入整个模块
import car导入模块中所有类(不推荐) from module_name import *
类名采用驼峰命名法:类中每个单词的首字母都大写,不使用下划线。实例名和模块名都小写,单词之间加下划线。
每个类在类定义后面包含一个文档字符串简要描述类的功能。模块也要。
类中可用一个空行来分隔方法,模块中用两个空行来分隔类。
先编写导入标准库模块的import语句,再添加一个空行,导入自己编写的模块的import语句。