一、引言
在上一篇文章中,我们以就面向对象编程进行了简单的介绍,这一章主要是进行一些细致补充与拓展,这部分内容在初学python时就已经学到了,现在回顾,没有做到学与用的结合,切记!!!
二、类
- 1.类的定义
python中“一切皆对象”。类称为类对象,类的实例称为实例对象。
- 2.构造函数__init__
一个python对象含以下部分:
- 3.实例属性
实例属性是从属于实例对象的属性
要点:
- 4.实例方法
实例方法是从属于实例对象的方法。
定义格式:
函数和方法的区别:
例子:
class Bettery():
"""模拟电动汽车的电池"""
def __init__(self, bettery_size=70):
self.bettery_size = bettery_size # 电池容量
self.electric_quantity = bettery_size # 电池剩余容量
self.electric_distance_ratio = 5 # 电量距离换算系数
self.remainder_range = self.electric_quantity *
self.electric_distance_ratio # 剩余可行驶距离
def get_electric_quantity(self):
"""查看当前容量"""
print("当前电池剩余电量:{}kw.h".format(self.electric_quantity))
def set_electric_quantity(self, electric_quantity):
"""设置电池剩余电量,重新计算电量可支撑行驶里程"""
if electric_quantity > 0 and electric_quantity < self.bettery_size:
self.electric_quantity = electric_quantity
self.remainder_range = self.electric_quantity *
self.electric_distance_ratio
else:
print("电量未设置在合理范围内!")
def get_remainder_range(self):
"""查看剩余可行驶里程"""
print("当前电量还可以继续行驶{}公里".format(self.remainder_range))
class Car():
"""模拟汽车"""
def __init__(self, brand, model, year):
"""初始化汽车属性"""
self.brand = brand # 品牌
self.model = model # 型号
self.year = year # 出厂年份
self.mileage = 0 # 里程碑数
def get_main_information(self): # self不能省
"""获取汽车主要信息"""
print("品牌:{},型号:{},出厂年份:{}".format(self.brand, self.model,
self.year))
def get_all_mileage(self):
"""获取总里程数"""
return "行车总里程:{}公里".format(self.mileage)
class ElectricCar(Car):
"""模拟电动汽车"""
def __init__(self, brand, model, year, bettery_size):
"""初始化电动汽车属性"""
super().__init__(brand, model, year)
self.bettery = Bettery(bettery_size) # 电池
def get_main_information(self): # 重写父类方法
"""获取电动车的主要信息"""
print("品牌:{} 型号:{} 出厂年份:{} 续航里程数:{}公里"
.format(self.brand, self.model, self.year,
self.bettery.bettery_size *
self.bettery.electric_distance_ratio))
my_electric_car = ElectricCar("NextWeek", "FF91", 2046, 70)
# 获取车辆主要信息
my_electric_car.get_main_information()
# 获取当前电池量
my_electric_car.bettery.get_electric_quantity()
# 重设电量
my_electric_car.bettery.set_electric_quantity(50)
# 获取当前电量
my_electric_car.bettery.get_electric_quantity()
# 获取当前剩余可行驶里程数
my_electric_car.bettery.get_remainder_range()
# 获得对象的所有属性与方法
print(dir(my_electric_car))
# 获得对象的属性字典
print(dir(my_electric_car.__dict__))
# 判断对象是不是指定类型
print(isinstance(my_electric_car,ElectricCar))
# 品牌:NextWeek 型号:FF91 出厂年份:2046 续航里程数:350公里
# 当前电池剩余电量:70kw.h
# 当前电池剩余电量:50kw.h
# 当前电量还可以继续行驶250公里
# ['__class__', '__delattr__', '__dict__', '__dir__', '__doc__', '__eq__', '__format__', '__ge__', '__getattribute__', '__gt__', '__hash__', '__init__', '__init_subclass__', '__le__', '__lt__', '__module__', '__ne__', '__new__', '__reduce__', '__reduce_ex__', '__repr__', '__setattr__', '__sizeof__', '__str__', '__subclasshook__', '__weakref__', 'bettery', 'brand', 'get_all_mileage', 'get_main_information', 'mileage', 'model', 'year']
# ['__class__', '__contains__', '__delattr__', '__delitem__', '__dir__', '__doc__', '__eq__', '__format__', '__ge__', '__getattribute__', '__getitem__', '__gt__', '__hash__', '__init__', '__init_subclass__', '__iter__', '__le__', '__len__', '__lt__', '__ne__', '__new__', '__reduce__', '__reduce_ex__', '__repr__', '__setattr__', '__setitem__', '__sizeof__', '__str__', '__subclasshook__', 'clear', 'copy', 'fromkeys', 'get', 'items', 'keys', 'pop', 'popitem', 'setdefault', 'update', 'values']
# True
创建过程
实例化对象时,先通过__new__创建对象,然后将对象地址传给__init__中的self参数,__init__用于初始化创建好的对象,最后再将创建好的对象地址返回给相应变量。
5.类对象
当解释器执行class语句时,就会创建一个类的类型对象(type)
class Student: #创建Student类的类型对象(type)
def __init__(self,name,score):
self.name = name
self.score = score
def say_score(self):
print("{0}的分数是{1}".format(self.name,self.score))
stu = Student #指向同一个类对象
s1 = stu("柳杰","100")
s2 = stu("谈昊田","99")
print(s1)
print(s2)
s1.say_score()
s2.say_score()
>>>
<__main__.Student object at 0x000001FE3C28F160>
<__main__.Student object at 0x000001FE3C28F128>
柳杰的分数是100
谈昊田的分数是99