zoukankan      html  css  js  c++  java
  • 反射

    --------------每一点滴的进展都是缓慢而艰巨的,一个人一次只能着手解决一项有限的目标。
    # ---------------------------------------------------------------------------------#
    # 本节主要内容:
    # 1. isinstance, type, issubclass
    # 2. 区分函数和⽅方法
    # 3. 反射(重点)


    # 字符串、字节序列:__repr__、__str__、__format__、__bytes__
    # 数值转换:__abs__、__bool__、__complex__、__int__、__float__、__hash__、__index__
    # 集合模拟:__len__、__getitem__、__setitem__、__delitem__、__contains__
    # 迭代枚举:__iter__、__reversed__、__next__
    # 可调用模拟:__call__
    # 上下文管理:__enter__、__exit__
    # 实例创建和销毁:__init__、__new__、__del__
    # 属性管理:__getattr__、__getattribute__、__setattr__、__delattr__、__dir__
    # 属性描述符:__get__、__set__、__delete__
    # 跟类相关的服务:__prepare__、__instancecheck__、__subclasschek__

    # []# --------------[type]--------------
    # def fun(a,b):
    # if (type(a)==int or type(a)==float) and (type(b) == int or type(b)==float):
    #
    # return a+b
    # else:
    # print("不能计算")
    #
    # c = fun("10",20)
    # print(c)

    # ---------------------------------------------------------------------------------#
    # --------------[isinstance]--------------
    # class ball:
    # pass
    #
    # class football(ball):
    # pass
    #
    # class socerball(football):
    # pass
    #
    # c = ball()
    # c1 = football()
    # c2 = socerball()
    #
    # print(isinstance(c,socerball))
    # print(isinstance(c,football))
    # print(isinstance(c,ball))

    # ---------------------------------------------------------------------------------#
    # class Boat:
    # def __init__(self,color,pinpai):
    # self.color =color
    # self.pinpai =pinpai
    #
    # def run(self):
    # print("军舰run")
    #
    # r = Boat("紫色",'歼击机5230')
    # # delattr(Boat,"color")
    # # r.run()
    #
    # # setattr(Boat,"run",lambda self:print("时刻在本战斗!"))
    # # r.run()
    #
    # # print(r.color)
    # # setattr(r,"color","金红")
    # # print(r.color)
    #
    # print(getattr(r,'pinpai'))
    # print(r.pinpai)

    # ---------------------------------------------------------------------------------#
    # 1. 看代码写结果并画图表示对象和类的关系积极执行过程

    # class StarkConfig(object):
    # list_display = []
    #
    # def get_list_display(self):
    # self.list_display.insert(0, 33)
    # return self.list_display
    #
    #
    # class RoleConfig(StarkConfig):
    # list_display = [11, 22]
    #
    #
    # s1 = StarkConfig()
    # s2 = StarkConfig()
    #
    # result1 = s1.get_list_display()
    # print(result1)
    # # -- > 33
    # result2 = s2.get_list_display()
    # print(result2)
    # -- > 33

    # ---------------------------------------------------------------------------------#
    # 2. 看代码写结果并画图表示对象和类的关系积极执行过程


    # class StarkConfig(object):
    # list_display = []
    #
    # def get_list_display(self):
    # self.list_display.insert(0, 33)
    # return self.list_display
    #
    #
    # class RoleConfig(StarkConfig):
    # list_display = [11, 22]
    #
    #
    # s1 = StarkConfig()
    # s2 = RoleConfig()
    #
    # result1 = s1.get_list_display()
    # print(result1)
    # # -- > 33
    # result2 = s2.get_list_display()
    # print(result2)
    # -- > 33 11 22

    # ---------------------------------------------------------------------------------#
    # 3. 看代码写结果并画图表示对象和类的关系积极执行过程

    # class StarkConfig(object):
    # list_display = []
    #
    # def get_list_display(self):
    # self.list_display.insert(0, 33)
    # return self.list_display
    #
    #
    # class RoleConfig(StarkConfig):
    # list_display = [11, 22]
    #
    #
    # s1 = RoleConfig()
    # s2 = RoleConfig()
    #
    # result1 = s1.get_list_display()
    # print(result1)
    # # -- > 33 11 22
    # result2 = s2.get_list_display()
    # print(result2)
    # -- > 33 11 22

    # ---------------------------------------------------------------------------------#
    # 4. 看代码写结果

    # class Base(object):
    # pass
    #
    # class Foo(Base):
    #
    # pass
    #
    # print("issubclass(Base,Foo)") # -- > False


    # ---------------------------------------------------------------------------------#
    # 5. 看代码写结果
    # 如果有以下 handler. py文件,请在run,py中补充代码实现
    # 获取 handler中所有成员名称:dir( handler)

    #-->['Base', 'F1', 'F2', 'F3', 'F4', 'F5', 'F6', '__builtins__', '__cached__', '__doc__', '__file__', '__loader__', '__name__', '__package__', '__spec__']

    # 获取 handle中名字叫Base的成员


    # 检查其他成员是否是Base类的子类(不包含Base),如果是则创建对象并添加到objs列表中

    #  handler.py
    # class Base(object):
    # pass
    #
    # class F1(Base):
    # pass
    #
    # class F2(Base):
    # pass
    #
    # class F3(F2):
    # pass
    #
    # class F4(Base):
    # pass
    #
    # class F5(object):
    # pass
    #
    # class F6(F5):
    # pass
    #
    # #  run.py
    # import handler
    #
    #
    # def func():
    # objs = []
    #
    # name_list = dir(handler)
    # print(name_list)
    #
    #
    # if__name__ == '__main__':
    #
    # func()j
    # ---------------------------------------------------------------------------------#
    #6. 补充代码
    class Foo(object):
    def __init__(self,name=None,age=None):
    self.name = "小猪佩奇"
    self.age = 100
    obj = Foo
    setattr(obj,"email","xiaozhupeiqi@zhuzhu.com")


    #请实现 : 一行代码实现获取obj中所有成员(字典类型)


    # ---------------------------------------------------------------------------------#
    #7.看代码写结果

    class Foo(object):
    def __init__(self,name=None,age=None):
    self.name = "小猪佩奇"
    self.age = 100
    obj = Foo
    setattr(obj,"email","xiaozhupeiqi@zhuzhu.com")

    v1 = getattr(obj,"email")
    v2 = getattr(Foo,"email")

    print(v1,v2)

    # ---------------------------------------------------------------------------------#




























  • 相关阅读:
    计算tableview的高度
    UIcollectionview与tableview的区别
    ios 屏幕适配
    避免表单多次提交
    Action权限验证
    正则小记
    在OnActionExecuting中阻止后面Action的执行
    批量上传图片uplodify插件
    表单多次提交
    windows 下安装 rabbitmq报init terminating in do_boot错误
  • 原文地址:https://www.cnblogs.com/dealdwong2018/p/9937755.html
Copyright © 2011-2022 走看看