面向对象编程(object-oriented programming,OOP):编写表示现实世界中的事物和情景的类(class)并基于这些类创建对象(object)。在编写类时,你要定义所有对象都具备的通用行为。根据类创建对象称为实例化实例(instance)

7.1 创建类

特殊方法用行话说叫作magic method,如__getitem__,dunder-getitem,双下划线方法

类中的函数称为方法_init_(self,...) 是一个特殊方法,其中self 形参指向实例,必不可少且必须位于首位。其他形参是基于类创建的实例的初始化属性。可通过实例访问的变量称为属性(attribute)

Code
# 定义类
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 = f"{self.year} {self.make} {self.model}" 
        return long_name.title() 
    def read_odometer(self):
        """打印汽车行驶里程"""
        print(f"This car has {self.odometer_reading} miles on it.")
    def update_odometer(self,mileage):
        """更新里程数
           禁止回调        """
        if mileage >= self.odometer_reading:
            self.odometer_reading = mileage
        else:
            print("错误!禁止回调!!!")
            
# 创建对象
my_new_car = Car('audi', 'a4', 2024)
Code
# 访问属性
my_new_car.make
my_new_car.odometer_reading

# 调用方法
print(my_new_car.get_descriptive_name())
my_new_car.read_odometer() 
2024 Audi A4
This car has 0 miles on it.

7.1.1 修改属性的值

Code
# 通过属性修改
my_new_car.odometer_reading = 55
my_new_car.odometer_reading

# 通过方法修改
my_new_car.update_odometer(100)
my_new_car.odometer_reading
my_new_car.update_odometer(24)
错误!禁止回调!!!

7.2 继承类

inheritance ,原有的类称为父类(parent class)超类(super class),新类称为子类(child class)

7.2.1 子类

Code
class ElectricCar(Car):               # 括号内指定父类名称
    '''电动车'''
    def __init__(self,make,model,year):
        '''先初始化父类的属性,
        再初始化电动车的特有属性'''
        super().__init__(make,model,year) # 调用父类的__init__()方法
        self.battery_size = 80
    def battery_capacity(self):
        '''打印电池容量'''
        print(f'电池容量为 {self.battery_size} kWh。')
    def read_odometer(self):              # 重写父类中的方法
        """打印电动车里程"""
        print(f"电动车已经行驶了{self.odometer_reading} 千米。")

# 创建对象
my_ECar = ElectricCar('nissan','leaf',2024)
print(my_ECar.get_descriptive_name())
my_ECar.battery_capacity()
my_ECar.read_odometer()
2024 Nissan Leaf
电池容量为 80 kWh。
电动车已经行驶了0 千米。

7.2.2 类的组合(composition)

Code
class Battery:
    '''电池信息'''
    def __init__(self,manufacture="BYD",material="Lithium_plomers",capacity=100):
        self.manufacture = manufacture
        self.material = material
        self.capacity = capacity
    def get_descriptive_name(self): 
        """返回格式规范的描述性信息""" 
        long_name = f"{self.manufacture} {self.material} {self.capacity}" 
        return long_name.title() 
    def print_battery_capacity(self):
        '''打印电池容量'''
        print(f'电池容量为 {self.capacity} kWh。')
        
class ElectricCar2(Car):             
    '''电动车'''
    def __init__(self,make,model,year,):
        super().__init__(make,model,year) # 调用父类的__init__()方法
        self.battery = Battery()

my_Ecar2 = ElectricCar2("nissan","leaf",2024)
my_Ecar2.battery.print_battery_capacity()
my_Ecar2.battery.get_descriptive_name()
电池容量为 100 kWh。
'Byd Lithium_Plomers 100'

7.3 导入类

from Module import * 


7.4 Python标准库