码迷,mamicode.com
首页 > 其他好文 > 详细

23反射进阶

时间:2019-04-01 14:20:53      阅读:144      评论:0      收藏:0      [点我收藏+]

标签:方式   foo   instance   文件中   ide   **kwargs   click   eve   *args   

反射

//////两个内置函数

issubclass    判断类与类之间是否有继承关系关系

语法:issubclass(Son,Foo)

判断Son是否是Foo的子类(子类不一定是‘‘父子‘‘继承,‘爷孙‘或隔代也是返回:真)

isinstance  判断对象与类之间的关系,这个类也包括父类

语法:isinstance(obj,cls)

和type的区别

# isinstance(obj,类)
    # 承认继承关系的

# 类 = type(obj)

 # 只承认实例化这个对象的那个类(不承认所有的继承关系)

实例

技术图片type和isinstance
# class User(object):pass
# class VIPUser(User):pass
#
# alex = VIPUser()
# ret1 = type(alex) is User
# ret2 = isinstance(alex,User)
# print(ret1,ret2)
# ret1 = type(alex) is VIPUser
# ret2 = isinstance(alex,VIPUser)
# print(ret1,ret2)

 

1反射对象中的内容

# 使用对象反射
# obj.属性名
# obj.方法名()


2反射类中的内容

# 使用类反射
# cls.静态变量名
# cls.类方法名()
# cls.静态方法名()


3反射本文件中的内容


 4反射模块中的内容

技术图片
import re
# ret = re.findall(‘\d+‘,‘2985urowhn0857023u9t4‘)
# print(ret)
# ‘findall‘
# getattr(re,‘findall‘)   # re.findall
# ret = getattr(re,‘findall‘)(‘\d‘,‘wuhfa0y80aujeiagu‘)
# print(ret)
模块反射

 

# 使用模块反射
# import time
# time.time()

技术图片
import time
# time.time  == getattr(time,‘time‘)
# time.time()  == getattr(time,‘time‘)()
time模块反射

 

# 两种方式
    # 对象名.属性名 / 对象名.方法名() 可以直接使用对象的方法和属性
    # 当我们只有字符串数据类型的内容的时候
        # getattr(对象名,‘方法名‘)()
        # getattr(对象名,‘属性名‘)

# 只要是a.b这种结构,都可以使用反射
# 用对象\类\模块反射,都只有以下场景
# 这种结构有两种场景
    # a.b   b是属性或者变量值
        # getattr(a,‘b‘)   == a.b
    # a.b()  b是函数或者方法
        # a.b()
            # getattr(a,‘b‘)()
        # a.b(arg1,arg2)
            # getattr(a,‘b‘)(arg1,arg2)
        # a.b(*args,**kwargs)
            # getattr(a,‘b‘)(*args,**kwargs)

 

 如果是本文件中的内容,不符合a.b这种结构
    # 直接调用func()
        # getattr(sys.modules[__name__],‘func‘)()
    # 直接使用类名 Person()
        # getattr(sys.modules[__name__],‘Person‘)()
    # 直接使用变量名 print(a)
        # getattr(sys.modules[__name__],‘a‘)
# 所有的getattr都应该和hasattr一起使用
    # if hasattr():
         getattr()

 

setattr

setattr 能够通过字符串数据类型的变量名 给一个对象创建一个新的属性

setattr 只用来修改或者添加属性\变量,不能用来处理函数或者是其他方法
    # a.b = value
    # setattr(a,‘b‘,value)
   
# delattr 只用来删除 属性\变量
    # del a.b 删除属性  相当于删除了a对象当中的b属性
    # delattr(a,‘b‘)

 

 

内置方法

23反射进阶

标签:方式   foo   instance   文件中   ide   **kwargs   click   eve   *args   

原文地址:https://www.cnblogs.com/xiaozhu1993/p/10635960.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!