1. 分主类和辅类 继承辅类就有该辅类中的功能, 不影响子类使用 2. 命名方式,以Mixin,able 为结尾, 3. 一般辅类的位置在主类的左边 4.主类功能可以有很多个,辅类可能有一个功能, 一个功能一个辅类,辅类可以有很多个,但主类只能有一个 例如: class Vehicle: # 交通工具 def run(self): pass ..... # class FlyMixin(): class Flyable(): def fly(self): ''' 飞行功能相应的代码 ''' print("I am flying") class CivilAircraft(Fly1able, Flyable, Vehicle): # 民航飞机 pass class Helicopter(Flyable, Vehicle): # 直升飞机 pass class Car(Vehicle): # 汽车并不会飞,但按照上述继承关系,汽车也能飞了 pass
1、什么是反射
指的是在程序运行过程中,动态的获取对象信息
2、为什么用反射
通过字符串操作类属性或者方法
3、如何使用反射
实现反射机制的步骤: 1.先通过dir()方法,查看出某个对象下可以.出哪些属性 print(dir(obj)) 2.可以通过字符串反射到真正的属性上,得到属性值 print(obj.__dict__[dir(obj)[-2]]) 但我们一般不用__开头__结尾的内置方法, 所以实现反射机制会跟下面四个内置函数一起使用: hasattr()#判断对象是否存在,类似与if判断某个属性在不在对象里面 getattr()#获取对象的属性 setattr()#赋值属性操作 delattr()#删除某个属性 上述四个内置函数对类同样适用 3.例子: class Student(): school = 'sh' def func(self): print("func") obj = Student() #x是个字符串,obj.不出字符串 # x = input("请输入学校") # x = 'age' # print(obj."age") print(getattr(obj, 'school1', None)) #属性不存在后面加个None,在的话不需要加None,也可以加存在就调,不存在打印出None print(hasattr(obj, 'school1')) setattr(obj, 'x', 10) print(obj.__dict__) delattr(Student, 'school') print(Student.__dict__) print(obj.__dict__)