• 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 都是息息相关的




  • 相关阅读:
    将博客搬至CSDN
    神州笔记本电脑【K670D】安装 Ubuntu18.04 系列操作
    ValueError: Unknown label type: 'continuous'
    Spark: JAVA_HOME is not set
    IDEA 搭建 Spark 源码 (Ubuntu)
    XX-Net 解决IPV6 不稳定,时好时坏。
    解决SBT下载慢,dump project structure from sbt?
    pip install kaggle 出现 【网络不可达】?
    Git clone 克隆Github上的仓库,速度慢?
    进程间的通信方式
  • 原文地址:https://www.cnblogs.com/weilaixiaochaoren/p/9662039.html
Copyright © 2020-2023  润新知