zoukankan      html  css  js  c++  java
  • python---issubclass/type/isinstance/ 反射(内置函数getattr/delattr...)

    # 一 python面向对象-内置函数(issubclass(), type(), isinstance())
    # issubclass 判断xxxx类是否是xxxx类的子类
    class egg:
        pass
    class eegg(egg):
        pass
    class yuneegg(eegg):
        pass
    
    dan = egg()
    edan = eegg()
    shouyunedan = yuneegg()
    
    print(issubclass(eegg, egg)) # True 鹅蛋继承蛋的属性,是子类
    print(issubclass(yuneegg,egg)) # True .受孕鹅蛋也是蛋的子类,都都蛋蛋
    print(issubclass(eegg, yuneegg)) # False 鹅蛋也有没受孕的
    
    # type 给出xxx的数据类型. 给出创建这个对象的类
    print(type(dan) and type(edan)) # False 返回创建他的类,不找子类或者父类,只找创造的类
    
    
    # isinstance 判断xxx对象是否是xxx类型的 判断是不是一个类的体系,只找直系向上的,不找分支和子类
    print(isinstance(dan, egg)) # True ,有蛋创建的
    print(isinstance(edan,egg)) # True ,鹅蛋也是单,是他的子类
    print(isinstance(shouyunedan, egg)) # TRUE受孕鹅蛋还是蛋,可以找祖宗
    print(isinstance(dan, eegg)) #  FALSE  蛋不一定是鹅蛋,也许是鸭蛋
    
    # 二 2. 如何分辨方法和函数.
    #         在类外面定义的函数一定是函数
    #         在类中:
    #             1. 实例方法: 如果是对象访问.方法,, 如果是类名访问是函数
    #             2. 静态方法: 都是函数
    #             3. 类方法: 都是方法
    #         如果想要用程序来判断. 需要引入两个模块
    #         from types import FunctionType, MethodType
    #         isinstance()
    from  types import  FunctionType,MethodType
    class Animal:
        def __init__(self, kemu, xueming):
            self.kemu = kemu
            self.xueming = xueming
        def add(self):
            return self.kemu + self. xueming
    tiger = Animal("cat", "oldhu")
    
    print(isinstance(tiger.add, FunctionType))
    print(isinstance(tiger.add, MethodType))
    
    
    # 三
    # 反射(重点)
    # 仅限于内存层面(函数执行不改变源文件,只修改内存加载的信息)
    # 重点:
    # hasattr(obj, str)判断对象中是否包含了xxx(str)
    import handler
    a = hasattr(handler, "Base") #存在True, 不存在FALSE
    b = hasattr(handler, "ali") #False
    print(a)
    print(b)
    
    # getattr(obj, str)从对象中获取xxxx(str)
    c = getattr(handler, "Base") # 存在返回Base变量
    # qita = getattr(handler, "aad")# 不能存在报错
    c()
    
    # 次重点:
    # setattr(obj, str, value) 给对象设置xxxx(str)属性值(value)
    setattr(handler, "t", 12) # 不存在执行新增,存在执行修改变量t
    print(handler.t)
    
    # delattr(obj, str)从对象中删除xxxxx(str) 信息
    delattr(handler,"t") # 删除变量t
    delattr(handler,"xxx") # 不存在报错
    print(handler.t)
    
  • 相关阅读:
    随手记几个容易被忽略的bug
    fiddler常见应用场景
    浅谈软件测试流程
    http抓包实战之http协议初始、fiddler初识
    http之header详解
    http协议基础(一)
    Fiddler抓包工具总结二(转自小坦克)
    接口测试总结
    [Python][爬虫]利用OCR技术识别图形验证码
    [总结]JS在Selenium中的使用
  • 原文地址:https://www.cnblogs.com/tcpblog/p/9721187.html
Copyright © 2011-2022 走看看