zoukankan      html  css  js  c++  java
  • Day 23 反射

     isinstance
    isinstance(obj,cls)检查是否obj是类cls的对象
    class Foo(object):
        pass
    obj = Foo()
    print(isinstance(obj,Foo))
    
    
    issubclass
    issubclass(sub,super)检查sub类是否是super的派生类
    class Foo(object):
        pass
    
    class Bar(Foo):
        pass
    
    print(issubclass(Bar,Foo))
    
    
     python面向对象中的反射:通过字符串的形式操作对象相关的属性。python中的一切事物都是对象(都可以使用反射)
    class Foo:
        role = 'person'
        def __init__(self,name,age):
            self.name = name
            self.age = age
        def func(self):
            print('hi,%s'%self.name)
    
    p = Foo('alex',26)
    检查是否含有某属性 return whether the object has an attribute with the given name
    # print(hasattr(p,'name'))
    # 获取属性 getattr(object,name,default = None)
    print(getattr(p,'age')) #属性
    print(getattr(p,'func')) #方法
    func = getattr(p,'func')
    func()
    # 设置属性 setattr(x,y,z) sets the named attribute on the given object to the specified value
    setattr(p,'name','nero')
    print(p.__dict__)
    setattr(p,'show_name',lambda self:self.name +'sb')
    print(p.show_name(p))
    # 删除属性 delattr(x,y)   Deletes the named attribute from the given object.
    delattr(p,'age')
    delattr(p,'show_name')
    delattr(p,'show_name111') #报错
    
    print(p.__dict__)
    # 类也是对象
    class Foo(object):
        staticField = 'old boy'
    
        def __init__(self):
            self.name = 'wupeiqi'
    
        def func(self):
            return 'func'
    
        @staticmethod
        def bar():
            return 'bar'
    
    print(getattr(Foo,'staticField'))
    print(getattr(Foo,'func'))
    print(getattr(Foo,'bar'))
    # 反射当成模块成员
    import sys
    
    def s1():
        print (s1)
    
    def s2():
        print(s2)
    
    this_module = sys.modules[__name__]
    
    print(hasattr(this_module,'s1'))
    print(getattr(this_module, 's2'))
    # 导入其他模块,利用反射查找该模块是否存在某个方法
    '''
    程序目录:
    module_test.py
    index.py
    
    当前文件:
    index.py
    '''
    
    import model_test as obj
    
    print(hasattr(obj,'test'))
    getattr(obj,'test')
    # __len__
    class A:
        def __init(self):
            self.a =1
            self.b =2
    
        def __len__(self):
            return len(self.__dict__)
    
    a= A()
    print(len(a))
    
    #__hash__
    class A:
        def __init__(self):
            self.a = 1
            self.b = 2
        def __hash__(self):
            return hash(str(self.a)+str(self.b))
    
    a = A()
    print(hash(a))
    class A:
        role = 'person'
        def func(self):
            print('*'*self)
    # ret = input('>>>')
    # print(A.__dict__[ret])
    print(getattr(A,'role'))    # 从A的命名空间里找一个属性 ,直接就可以找到这个属性的值
    f = getattr(A,'func');f(2) # 从A的命名空间里找一个方法 ,找到的是这个方法的内存地址
    getattr(A,'func')(2)
    A.func(2)
    # 类使用类命名空间中的名字
    # 对象使用对象能用的方法和属性
    # 模块使用模块中的名字
    默写1
    class A:
        role = 'Person'
        def __init__(self):
            self.money = 500
        def func(self):
            print('*'*10)
    
    a = A()
    print(a.func)
    getattr(a,'func')()
    print(getattr(a,'money'))
    默写2
    def
    login(): print('执行login功能') def register(): print('执行register功能') import sys # 和python解释器相关的内容都在sys里 print(sys.modules['__main__']) func = input('>>>') if hasattr(sys.modules['__main__'],func): getattr(sys.modules['__main__'],func)()

    
    
     
  • 相关阅读:
    新手第一次联系oracle的碰到的触发器不能创建的问题
    dubbo注册中心占位符无法解析问题(二)
    dubbo注册中心占位符无法解析问题(一)
    .
    Ubuntu16 安装后配置
    TiDB-----使用 TiUP cluster 在单机上模拟生产环境部署步骤
    TiDB 单机安装(在 Linux OS 上部署本地测试环境)
    WPF查找子控件和父控件方法
    Java基础相关
    C++ namespace浅析
  • 原文地址:https://www.cnblogs.com/kateli/p/8877333.html
Copyright © 2011-2022 走看看