创建和使用类
- 创建和使用类
- 创建类的示例
class Dog(): """一次模拟小狗的简单尝试""" def __init__(self, name, age): """初始化属性name和age""" self.name = name self.age = age def sit(self): """模拟小狗被命令时蹲下""" print(self.name.title() + " is now sitting.") def roll_over(self): """模拟小狗被命令时打滚""" print(self.name.title() + " rolled over!")
- 使用关键字class() 创建类
- 类的名称首字母大写
- 文档字符串描述类的功能
- 类中的函数称为方法
- 方法__init__() 每次根据类创建实例时都会自动调用
- 方法中形参self必不可少
- __init__初始化类中的属性
- self为前缀的变量都可供类中的所有方法使用
- 根据类创建实例
class Dog(): --snip-- my_dog = Dog('willie', 6)
- 访问属性
- 使用句点表示法
my_dog.name
- 使用句点表示法
- 调用方法
- 使用句点表示法
my_dog = Dog('willie', 6) my_dog.sit() my_dog.roll_over()
- 使用句点表示法
- 可根据需求创建多个类的实例
使用类和实例
- 给属性指定默认值
- 类中的每个属性都必须有初始值
- 在方法__init__()内指定这种初始值
def __init__(self, make, model, year): """初始化描述汽车的属性""" self.make = make self.model = model self.year = year self.odometer_reading = 0
- 修改属性的值
- 直接修改属性的值
- 使用句点表示法通过实例直接访问它
my_new_car.odometer_reading = 23
- 使用句点表示法通过实例直接访问它
- 通过方法修改属性的值
- 把要修改的值传递给一个方法
def update_odometer(self, mileage): """将里程表读数设置为指定的值""" self.odometer_reading = mileage
- 通过方法对属性的值进行递增
- 将属性值递增特定的量
def increment_odometer(self, miles): """将里程表读数增加指定的量""" self.odometer_reading += miles
- 直接修改属性的值
继承
子类自动继承其父类的所有属性和方法,同时还可以定义自己的属性和方法
- 子类的方法__init__()
- 创建子类的实例时,Python首先需要完成的任务是给父类的所有属性赋值
class ElectricCar(Car): def __init__(self, make, model, year): """初始化父类的属性""" super().__init__(make, model, year)
- 创建子类时,父类必须包含在当前文件中,且位于子类的前面
- 定义子类时,必须在括号内指定父类的名称
- super()是一个特殊函数,帮助Python将父类和子类关联起来
- 创建子类的实例时,Python首先需要完成的任务是给父类的所有属性赋值
- 给子类定义属性和方法
- 子类继承父类后,添加子类的新属性和新方法
super().__init__(make, model, year) self.battery_size = 70
def describe_battery(self): """打印一条描述电瓶容量的消息""" print("This car has a " + str(self.battery_size) + "-kWh battery.")
- 子类继承父类后,添加子类的新属性和新方法
- 重写父类的方法
- 父类的方法不符合子类的要求,可在子类中重新定义与父类同名的方法
- 将实例用作属性
- 将类的一部分独立出来放到一个新类中,并用新类的实例作为原先类的一个属性
class Battery(): """一次模拟电动汽车电瓶的简单尝试""" ———————————— self.battery = Battery()
- 将类的一部分独立出来放到一个新类中,并用新类的实例作为原先类的一个属性
导入类
-
导入单个类
from car import Car my_new_car = Car('audi', 'a4', 2016)
-
可以在一个模块中储存多个类
-
从一个模块中导入多个类
from car import Car, ElectricCar my_beetle = Car('volkswagen', 'beetle', 2016) my_tesla = ElectricCar('tesla', 'roadster', 2016)
-
导入整个模块
- 导入整个模块,再使用句点表示法访问需要的类
import car my_beetle = car.Car('volkswagen', 'beetle', 2016) my_tesla = car.ElectricCar('tesla', 'roadster', 2016)
- 导入整个模块,再使用句点表示法访问需要的类
-
导入模块中的所有类
from module_name import *
-
在一个模块中导入另一个模块
- 将类存储在多个模块中时,一个模块中的类依赖于另一个模块中的类
类编码风格
- 类名应采用驼峰命名法,即将类名中的每个单词的首字母都大写,而不使用下划线
- 实例名和模块名都采用小写格式,并在单词之间加上下划线
- 对于每个类,都应紧跟在类定义后面包含一个文档字符串
- 每个模块也都应包含一个文档字符串
- 可使用空行来组织代码,但不要滥用