zoukankan      html  css  js  c++  java
  • python学习之自省/反射

    自省/反射
    自省也称作反射,这个性质展示了某对象是如何在运行期取得自身信息的。如果传一个对象给你,
    你可以查出它有什么能力,这是一项强大的特性。如果Python不支持某种形式的自省功能,dir和
    type内建函数,将很难正常工作。还有那些特殊属性,像__dict__,__name__及__doc__

    class myClass(object):
        def __init__(self):
            self.foo = 100
        
        def bar(self):
            print("print bar")


    myInst = myClass()
    print(hasattr(myInst, 'foo'))  # 实例类对象是否有foo属性,返回布尔值
    print(getattr(myInst, 'foo'))  # 从实例类对象里取出foo属性的值
    print(hasattr(myInst, 'bar'))  # 实例类对象是否有bar函数,返回布尔值
    print(getattr(myInst, 'errorbar', 'oops!'))  # 第一个参数实例,第二个参数是否有errorbar属性
    # 如果没有这个属性,默认打印oops,没有默认参数抛异常
    print(getattr(myInst, 'bar', 'oops!'))  # 第二个参数存在,返回对象的内存地址
    setattr(myInst, 'b', 'test123')  # 设置一个新实例属性,第一个参数实例,第二个参数属性,第三参数属性值
    setattr(myInst, 'age', lambda self: self.foo + 200)
    delattr(myInst, 'b')  # 删除一个实例的属性
    print((dir(myClass)))
    print(dir(myInst))
    print(dir())
    print(dir(myInst.foo))
    print(myInst.__dict__)
    print(myInst.age(myInst))

    例子2:
    class FtpClient:
        'ftp客户端,但是还么有实现具体的功能'
        def __init__(self,addr):
            print('正在连接服务器[%s]' %addr)
            self.addr=addr
            
    #from module import FtpClient
    f1=FtpClient('192.168.1.1')
    if hasattr(f1,'get'):
        func_get=getattr(f1,'get')
        func_get()
    else:
        print('---->不存在此方法')
        print('处理其他的逻辑')

  • 相关阅读:
    每周一荐:代码编辑器sublime
    每周一荐:Google的序列化框架Protobuf
    每周一荐:ObjectiveC的开源开发环境GNUstep
    每周一荐:用gnuplot绘制函数曲线
    每周一荐:学习ACE一定要看的书
    临时变量管理器
    每周一荐:TotalCommand的文件夹同步功能
    每周一荐:支持latex的思维导图软件docear
    关于程序员面试的一点想法
    每周一荐:Python Web开发框架Django
  • 原文地址:https://www.cnblogs.com/jinpingzhao/p/12735540.html
Copyright © 2011-2022 走看看