类-面向对象编程

Python数据科学手册 第二版下载 python数据科学入门_Python数据科学手册 第二版下载

#创建类
class Cat():         #初始化属性
    
     def __init__(self, name):     #init两侧有2个下划线
            
        self.name = name
        
     def jump(self):    #模拟猫的跳跃
        
        print(self.name + " is jumping")
        
#用类创建实例
my_cat = Cat("Loser")
your_cat = Cat("Lucky")

#调用属性
print(my_cat.name)
print(your_cat.name)

my_cat.jump()
your_cat.jump()

1.1 类

三要素:类名、属性、方法

1.1.1 类的命名

要有实际意义
采用驼峰命名法

#class 类名
"""类前空两行"""


class Car();
"""对该类的简单介绍"""
    pass


"""类后空两行"""
1.1.2 类的属性
class __init__(self, brand, model, year):
    """初始化汽车属性"""                  #相当于类的内部变量
    self.brand = brand                    #汽车的品牌
    self.model = model                    #汽车的型号         
    self.year = year                      #汽车的出厂年份
    self.mileage = 0                      #汽车总里程初始化为0
1.1.3 类的方法
#相对于类内部的定义
class Car():
    """模拟汽车"""
    
    def __init__(self, brand, model, year):   #初始化汽车属性
        self.brand = brand                    #汽车的品牌
        self.model = model                    #汽车的型号         
        self.year = year                      #汽车的出厂年份
        self.mileage = 0                      #汽车总里程初始化为0
        
    
    
    def get_main_information(self):      #self不能省
        """获取汽车主要信息"""
        print("品牌:{} 型号:{} 出厂年份:{} ",format(self.brand, self.model, self.year))
        
        
    def get_mileage(self):
        """获取总里程数"""
        return "行车总里程:{}公里".format(self.mileage)

1.2 创建实例

1.2.1 创建实例

将实例赋值给对象,实例化过程中,传入相应的参数
v = 类名 (必要的初始化参数)

my_new_car = Car("Audi","A6",2018)
1.2.2 访问属性

类名:属性名

print(my_new_car.brand)
print(my_new_car.model)
print(my_new_car.year)
1.2.3 调用方法
my_new_car = Car("Audi","A6",2018)
my_new_car.get_main_information()
s = my_new_car.get_mileage()
print(s)
1.2.4 属性的修改
  1. 直接修改
my_old_car = Car("BYD", "宋",2016)
my_old_car.mileage = 12000
print(my_old_car.mileage)
print(my_old_car.get_mileage())
  1. 通过方法修改属性
def set_mileage(self, distance):
        self.mileage = distance

my_old_car.set_mileage(8000)
print(my_old_car.get_mileage())

将每次的里程数累加

def increment_mileage(self,distance):
        self.mileage = self.mileage + distance

my_old_car.increment_mileage(500)
print(my_old_car.get_mileage())
小结
my_cars = [my_new_car, my_old_car]    #列表

1.3 类的继承

1.3.1 简单的继承

父类

class Car():
    """模拟汽车"""
    
    def __init__(self, brand, model, year):   #初始化汽车属性
        self.brand = brand                    #汽车的品牌
        self.model = model                    #汽车的型号         
        self.year = year                      #汽车的出厂年份
        self.mileage = 0                      #汽车总里程初始化为0
        
    
    
    def get_main_information(self):      #self不能省
        """获取汽车主要信息"""
        print("品牌:{} 型号:{} 出厂年份:{} ".format(self.brand, self.model, self.year))
        
        
    def get_mileage(self):
        """获取总里程数"""
        return "行车总里程:{}公里".format(self.mileage)
    
    def set_mileage(self, distance):
        if distance < 0:
            print("里程数不能为负!")
        else:
            self.mileage = distance
            
    def increment_mileage(self,distance):
        self.mileage = self.mileage + distance

子类
class 子类名(父类名):

  • 新建一个电动汽车的类
class ElectricCar(Car):
    """模拟电动汽车"""
    
    def __init__(self, brand, model, year):
        super().__init__(brand, model, year)   #声明继承父类的属性

my_electric_car = ElectricCar("FF91","Tomorrow", 2048)
my_electric_car.get_main_information()
1.3.2 给子类添加属性和方法
class ElectricCar(Car):
    """模拟电动汽车"""
    
    def __init__(self, brand, model, year, bettery_size):
        super().__init__(brand, model, year)   #声明继承父类的属性
        self.bettery_size = bettery_size          #电池容量
        self.bettery_quantity = bettery_size      #电池剩余电量
        self.bettery2distance_ratio = 5           #电池距离换算系数  5公里/kw.h
        self.remainder_range = self.bettery_quantity*self.bettery2distance_ratio  #剩余可行驶里程
        
    def get_electric_quantity(self):   #查看当前电池电量
        print("当前电池剩余电量: {} kw.h".format(self.bettery_quantity))   
        
    def set_electric_quantity(self, bettery_quantity):       #设置当前电池电量
        if bettery_quantity < 0 or bettery_quantity > self.bettery_size:
            print("电量未设置在合理范围内!")
        else:
            self.bettery_quantity = bettery_quantity
            self.remainder_range = self.bettery_quantity*self.bettery2distance_ratio
            
            
    def get_remainder_range(self):
        print("当前电量还可以继续行驶{}公里!".format(self.remainder_range))
    
my_electric_car = ElectricCar("FF91","Tomorrow", 2048, 70)
my_electric_car.get_main_information()
my_electric_car.get_electric_quantity()
my_electric_car.set_electric_quantity(50)
my_electric_car.get_remainder_range()
1.3.3 重写父类的方法–多态
def get_main_information(self):       #重写父类方法
        print("品牌:{} 型号:{} 出厂年份:{} 续航里程 {} 公里".format(self.brand, self.model, self.year, self.bettery_size))
1.3.4 用在类中的实例

把电池抽象成一个对象

class Bettrry():
    
    def __init__(self, bettery_size = 70):
        self.bettery_size = bettery_size          #电池容量
        self.bettery_quantity = bettery_size      #电池剩余电量
        self.bettery2distance_ratio = 5           #电池距离换算系数  5公里/kw.h
        self.remainder_range = self.bettery_quantity*self.bettery2distance_ratio  #剩余可行驶里程
        
    def get_electric_quantity(self):   #查看当前电池电量
        print("当前电池剩余电量: {} kw.h".format(self.bettery_quantity))   
        
    def set_electric_quantity(self, bettery_quantity):       #设置当前电池电量
        if bettery_quantity < 0 or bettery_quantity > self.bettery_size:
            print("电量未设置在合理范围内!")
        else:
            self.bettery_quantity = bettery_quantity
            self.remainder_range = self.bettery_quantity*self.bettery2distance_ratio
            
            
    def get_remainder_range(self):
        print("当前电量还可以继续行驶{}公里!".format(self.remainder_range)) 
        
        
class ElectricCar(Car):
    """模拟电动汽车"""
    
    def __init__(self, brand, model, year, bettery_size):
        super().__init__(brand, model, year)   #声明继承父类的属性
        self.bettery = Bettrry(bettery_size)
        
    def get_main_information(self):       #重写父类方法
        print("品牌:{} 型号:{} 出厂年份:{} 续航里程 {} 公里".format(self.brand, self.model, self.year, self.bettery.bettery_size*self.bettery.bettery2distance_ratio))
        
        
my_electric_car = ElectricCar("FF91","Tomorrow", 2048, 70)
my_electric_car.get_main_information()
my_electric_car.bettery.set_electric_quantity(50)
my_electric_car.bettery.get_electric_quantity()
my_electric_car.bettery.get_remainder_range()