ICode9

精准搜索请尝试: 精确搜索
首页 > 编程语言> 文章详细

python面向对象的Mixins机制和反射

2021-07-15 16:02:24  阅读:165  来源: 互联网

标签:__ obj python Mixins 面向对象 辅类 print class 属性


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

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有