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__)
上一篇:Maven环境搭建(包括dependencies进度条不动解决方案)


下一篇:Vue 中mixins混入使用