python面向对象的Mixins机制和反射
作者:互联网
Minxins机制
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__)
标签:__,obj,python,Mixins,面向对象,辅类,print,class,属性 来源: https://www.cnblogs.com/zty78/p/15015941.html