类-面向对象编程
#创建类
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 属性的修改
- 直接修改
my_old_car = Car("BYD", "宋",2016)
my_old_car.mileage = 12000
print(my_old_car.mileage)
print(my_old_car.get_mileage())
- 通过方法修改属性
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()