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('处理其他的逻辑')

  • 相关阅读:
    解决网页元素无法定位的几种方法
    转载:pycharm最新版新建工程没导入本地包问题:module 'selenium.webdriver' has no attribute 'Firefox'
    关于list的漏删
    春风十里不如你
    记我兵荒马乱的一周(0808-0812)--用户反馈及修改点验证
    vue定时器
    业务系统多机房多活实现思路
    分布式开发之:id生成器
    关于部署系统的一些思考
    web系统认证与鉴权中的一些问题
  • 原文地址:https://www.cnblogs.com/jinpingzhao/p/12735540.html
Copyright © 2011-2022 走看看