一,对象概念
面向对象是一种编程思想,它是基于面向过程的。好比在饭店吃饭,要解决的问题是吃饭,但我没有自己去买菜做饭,而是把这一系列繁琐的操作过程交给饭店的厨师,就吃厨师做好的饭就行。面向对象就是我直接调用已经存在的对象就行,不用再去重新写一遍。
二,类
对象是一个具体的实体,而类就是抽象的模版。类中包含属性和行为。所谓属性就相当于定义变量,行为就是相当于定义函数。我们定义一个类,把所带的属性和要做的行为都写进去,想要用的时候直接创建对象调用类就行,下面用一个简单的代码展示一下:
# 1.定义类
class Person:
# 1.1 属性赋值:weight
def __init__(self):
self.weight = 70
# 1.2 定义方法: run
def run(self):
self.weight-=2
print(f'跑步一次之后体重为{self.weight}')
# 1.3 定义方法:eat
def eat(self):
self.weight+=1
print(f'大吃大喝后体重为{self.weight}')
#在main函数中进行测试
if __name__ == '__main__':
# 2.创建对象
aosiding = Person()
# 3.调用方法
aosiding.run() #结果为68
aosiding.eat() #结果为69
aosiding.run() #结果为67
aosiding.run() #结果为65
aosiding.eat() #结果为66
其中def__init__(self)是初始化属性的时候要写的,里面的self是对象本身,类内添加属性的方式是self.属性名=属性值的方式,类外进行属性的添加的话就是对象名.属性名=属性值的方式。还有def__str__方法是打印对象时会自动调用,def__del__方法是当删除对象的时候对调用的,用来清理资源。
三,三大特性
三大特性分别是:继承、封装、多态。其中封装就是把属性和方法写到类里的操作,封装可以为属性和方法添加私有权限,方式是在属性前加两个下划线比如self.__属性名=属性值 继承指的是多个类之间的所属关系,即子类默认继承父类的属性和方法。 其中所有的类都直接或者间接继承自object类, 比如上面的代码中虽然没有写object,但默认的父类就它。继承又分为单继承和多继承,字面意思也能看出是继承父类个数的区别。下面展示多继承的代码:
# 1.定义老师类
class Teacher(object):
# 1.1 属性
def __init__(self):
self.tool = '书本'
# 1.2 方法
def teaching(self):
print(f'老师使用{self.tool}上课')
# 2.定义医生类
class Doctor(object):
# 1.1 属性
def __init__(self):
self.tool = '手术刀'
# 1.2 方法
def saving(self):
print(f'医生使用{self.tool}救人')
# 3.定义学生类
class Student(Teacher,Doctor):
# 1.1 属性
def __init__(self):
self.task = '学习'
# 1.2 方法
def learning(self):
print(f'学生要{self.task}')
#1.3继承老师类
def teacher_teaching(self):
Teacher.__init__(self)
Teacher.teaching(self)
# 1.4 继承医生类
def doctor_saving(self):
Doctor.__init__(self)
Doctor.saving(self)
#在main函数中测试
if __name__ == '__main__':
#创建学生对象
aosiding = Student()
print(aosiding.task) # 结果为:学习
aosiding.learning() # 结果为:学生要学习
aosiding.teacher_teaching() # 结果为:老师使用书本上课
aosiding.doctor_saving() # 结果为:医生使用手术刀救人
多态指的是:多种状态。比如:同样一个函数在不同的场景下有不同的状态。多态的条件首先得有继承 (定义父类、定义子类,子类继承父类),然后就是函数重写 (子类重写父类的函数),最后是父类引用指向子类对象 (子类对象传给父类对象调用者)。请看下面代码的展示方便理解多态:
# 创建父类——妖精类,定义:妖精生存标准
class Fairy(object):
# 定义函数,有魔法技能
def magic(self):
pass
# 定义函数:会飞翔技能
def fly(self):
pass
# 定义S级妖精类
class Sfairy(Fairy):
# 魔法技能
def magic(self):
return ('换装-天轮之铠')
# 飞翔技能
def fly(self):
return ('黑羽之铠飞翔')
# 定义龙妖精类
class Dragon(Fairy:
# 魔法技能
def magic(self):
return ('红莲爆炎刃')
# 飞翔技能
def fly(self):
return ('哈比伙伴飞翔')
# 定义星妖精类
class Star(Fairy):
# 魔法技能
def magic(self):
return ('超繁星魔法')
# 飞翔技能
def fly(self):
return ('辅助飞翔')
def fairy_test(myobj:Fairy):
print(magic())
print(fly())
# 在main函数中完成测试
if __name__ == '__main__':
# 创建打印机对象
aiersa = Sfairy()
nazi = Dragon()
luxi = Star()
# 具体测试结果
fairy_test(aiersa) # 结果为:换装-天轮之铠
# 黑羽之铠飞翔
fairy_test(nazi) # 结果为:红莲爆炎刃
# 哈比伙伴飞翔
fairy_test(luxi) # 结果为: 超繁星魔法
# 辅助飞翔