zoukankan      html  css  js  c++  java
  • 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 都是息息相关的




  • 相关阅读:
    (转)PHP获取今天、昨天、明天的日期
    (转)META http-equiv="refresh" 实现网页自动跳转
    (转)PHP中文处理 中文字符串截取(mb_substr)和获取中文字符串字数
    (转)Apache2 httpd.conf 配置详解 (二)
    Process finished with exit code 129
    Importing image to python :cannot import name 'imread'
    CUDA运行时错误 --- CUDA_ERROR_LAUNCH_FAILED: unspecified launch failure
    Recommendation system
    php手动实现ip2long和long2ip
    git将某个分支的代码完全覆盖另一个分支
  • 原文地址:https://www.cnblogs.com/weilaixiaochaoren/p/9662039.html
Copyright © 2011-2022 走看看