• python--面向对象的特殊方法(反射,内置方法)


    1.反射:hasattr,getattr,setattr,delattr

    使用字符串数据类型的变量名来操作一个变量的值
    使用反射获取某个命名空间中的值,
    需要
    有一个变量指向这个命名空间的
    字符串数据类型的名字,
    再使用getattr获取值,
    如果是变量能直接获得结果
    如果是函数,只能拿到内存地址,加上括号就是执行
    使用类名反射 : 静态属性、类方法、静态方法
    使用对象名反射 :对象属性、类中的普通方法
    使用模块名反射 : 变量 函数 类
    在自己所在的文件中反射全局变量 :getattr(sys.modules[__name__],'要反射的名字')

    2.类的内置方法:
    import mmm
    print(mmm.a) # 直接使用模块调用模块中的变量
    print(getattr(mmm,'a')) # 使用反射调用模块中的变量a
    print(getattr(mmm,'b')) # 使用反射调用模块中的变量b
    mmm.wahaha() # 直接使用模块调用模块中的函数
    getattr(mmm,'wahaha')() # 使用反射调用模块中的函数

    print(mmm.QQxing) # 直接使用模块获取类的内存地址
    taibai = mmm.QQxing('光头') # 实例化模块中的类
    taibai.ADCa() # 实例调用方法
    cls = getattr(mmm,'QQxing') # 使用反射获取模块中的类
    obj = cls('光头') # 使用反射得到的类进行实例化
    print(obj)
    getattr(obj,'ADCa')() # 使用反射调用类中的方法

    对象加上(),可以出发这个类的__call__方法。
    class Foo:
    def __call__(self):
    print('call')

    Foo()()
    obj = Foo()
    obj() # 相当于调用__call__
    内置函数的len函数是依赖类中的__len__
    class Classes:
    def __init__(self,student_lst):
    self.student_lst = student_lst
    def __len__(self):return len(self.student_lst)
    # 某个类中有多少个属性???
    obj = Wahaha(6,'haha',7)
    print(len(obj.__dict__))
    print(len(obj))
    # __eq__ 是判断值是否相等的时候依赖__eq__的结果

    # repr 和 str.
    在没有实现__str__方法的情况下,__repr__能够完全替代__str__的功能
    但是__str__不能代替__repr__的工作
    在__repr__和__str__都存在的情况下:
    __repr__方法 和 repr() %r都是息息相关的
    __str__方法 和 str() print() %s 都是息息相关的




  • 相关阅读:
    JavaScript 数据类型判断
    使用渐进增强的方式美化复选框样式
    使用 Bootstrap 和 HTML5 Boilerplate 开始一个项目
    CSS基础知识之文本属性二三事
    精简CSS代码
    CSS选择器特殊性与重要性
    面试官:能解释一下javascript中的this吗
    VueRouter爬坑第四篇-命名路由、编程式导航
    Vuex实践(下)-mapState和mapGetters
    Vuex实践(中)-多module中的state、mutations、actions和getters
  • 原文地址:https://www.cnblogs.com/weilaixiaochaoren/p/9662039.html
Copyright © 2020-2023  润新知