第九章 类

1 创建和使用类

编写类:定义一大类对象都有的通用行为

基于类创建对象:每个对象都自动具备这种通用行为,再根据需要服务每个对象独特个性

实例化:根据类创建对象

1.1 创建Dog类

class Dog:
    """一次模拟小狗的简单尝试"""
    def __init__(self,name,age):
        """初始化属性name和age"""
        self.name = name
        self.age = age

    def sit(self):

    def roll_over(self):

方法:类中的函数

方法__init__():根据类创建新实例时,python会自动运行它。

以self为前缀的变量可供类中的所有方法使用。

1.2 根据类创建实例

my_dog = Dog('Willie',6)

句点表示法访问属性:my_dog.name

句点表示法调用方法:my_dog.sit()

2 使用类和实例

2.1 Car类

class Car:
    """一次模拟汽车的简单尝试"""
    def __init__(self,make,model,year):
        """初始化描述汽车的属性"""
        self.make = make
        self.model = model
        self.year = year

    def get_descriptive_name(self):
        """返回整洁的描述性信息"""
        long_name = f"{self.year} {self.make} {self.model}"
        return long_name.title()

2.2 给属性指定默认值

class Car:
    """一次模拟汽车的简单尝试"""
    def __init__(self,make,model,year):
        """初始化描述汽车的属性"""
        self.make = make
        self.model = model
        self.year = year
        self.odometer = 0

    def get_descriptive_name(self):
        """返回整洁的描述性信息"""
        long_name = f"{self.year} {self.make} {self.model}"
        return long_name.title()

    def read_odmeter(self):
        print(f"{self.odometer}")

2.3 修改属性的值

方法一:直接修改属性的值

my_car = Car('audi','a4',2019)
my_new_car.odometer_reading = 23

方法二:通过方法修改属性的值

class Car:
    --snip--

    def update_odometer(self,mileage):
        """将里程表读数设置为指定的值"""
        self.odometer_reading = mileage

my_car = Car('audi','a4',2019)
my_car.update_odometer(23)
my_car.read_odometer()

方法三:通过方法对属性的值进行递增

class Car:
    --snip--

    def update_odometer(self,mileage):
        """将里程表读数设置为指定的值"""
        self.odometer_reading = mileage

    def increment_odometer(self,miles):
        """将里程表读数增加指定的值"""
        self.odometer_reading += miles   

my_car = Car('audi','a4',2019)
my_car.update_odometer(23)
my_car.read_odometer()

my_car.increment_odometer(10)
my_car.read_odometer()

3 继承

继承:一个类自动获得另一个类的所有属性和方法

3.1 子类的继承方法__init__()

class Car:
    --snip--

class ElectricCar(Car):
    """电动汽车的独特之处"""

    def __init__(self,make,model,year):
        """"初始化父类的属性"""
        super().__init__(make,model,year)

my_tesla = ElectricCar('tesla','model s',2019)

 创建子类时,父类必须包含在当前文件中,且位于子类前面。

定义子类时,必须在圆括号内指定父类的名称。

方法__init__():接受创建Car实例所需的信息

函数super():调用父类的方法__init__(),让实例包含这个方法中定义的所有属性。

3.2 给子类定义属性和方法

class Car:
    --snip--

class ElectricCar(Car):
    """电动汽车的独特之处"""

    def __init__(self,make,model,year):
        """"初始化父类的属性,在初始化电动汽车的特有属性"""
        super().__init__(make,model,year)
        self.battery_size = 75

    def describe_battery(self):
        print(self.battery_size)

3.3 重写父类的方法

why:对不符合子类模拟实物的行为,都可以重写

how:定义一个与重写父类方法同名的方法,python只会关注你在子类中定义的相应方法。

同名重写:继承精华,剔除糟粕

3.4 将实例用作属性

why:添加细节过多,将类的一部分提取出来,作为独立的类。(大类拆分为小类)

class Car:
    --snip--

class Battery:
    """一次模拟电动汽车电瓶的简单尝试"""
    
    def __init__(self,bay=ttery_size=75):
        """初始化电瓶的属性"""
        self.battery_size = battery_size

    def describe_battery(self):
        print(self.battery_size)

class ElectricCar(Car):
    """电动汽车的独特之处"""

    def __init__(self,make,model,year):
        """"初始化父类的属性,在初始化电动汽车的特有属性"""
        super().__init__(make,model,year)
        self.battery_size = Battery

my_tesla = ElectricCar('tesla','model s',2019)

my_tesla.battery.describe_battery()

3.5 模拟实物

4 导入类

4.1 导入单个类

将Car类存储在一个名为car.py的模块中

from car import Car   # 文件名即为模块名

4.2 在一个模块中存储多个类

from car import ElectricCar

4.3 在一个模块中导入多个类

from car import Car,ElectricCar

4.4 导入整个模块

import car

4.5 导入模块中的所有类

from car import *

4.6 在一个模块中导入另一个模块

将Car类存储在car.py模块中,将ElectricCar类和Battery类存储在electric_car.py模块中。

"""一组可用于表示汽车的类"""
class Car:
    --snip--
"""一组可用于表示电动汽车的类"""
form car inport Car

class Battery:
    --snip--

class ElectricCar(Car):
    --snip--
# 创建任意类型的汽车
from car import Car
from electric_car import ElectricCar

4.7 使用别名

from 模块名 import 类名 as 别名

4.8 自定义工作流程

5 Python标准库

6 类编码风格

类名命名:驼峰命名法

在类中:一个空行分隔方法

在模块中:两个空行分隔类

先编写导入标准库模块的import语句,再添加一个空行后编写导入自定义模块的import语句

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值