zoukankan      html  css  js  c++  java
  • 反射

    反射

    用字符串数据类型的名字 来操作这个名字对应的函数实例变量绑定方法各种方法

    1.反射对象的 实例变量
    2.反射类的 静态变量/绑定方法/其他方法
    3.模块中的 所有变量
    被导入的模块
    当前执行的py文件 - 脚本

    class Person:
        def __init__(self,name ,age):
            self.name = name
            self.age = age
        def qqxing(self):
            print('qqxing')
    alex = Person('alex',83)
    ret = getattr(alex,'name')
    print(ret) #alex
    s = getattr(alex,'qqxing')
    s()#qqxing
    
    #反射模块中的 所有变量、方法
    # import a
    # print(a.Wechat)
    # print(a.Alipay)
    # # 对象名.属性名 ==> getattr(对象名,'属性名')
    # # a.Alipay ==> getattr(a,'Alipay')
    # print(getattr(a, 'Alipay'))
    # print(getattr(a, 'Wechat'))
    --------------------------------
    import a
    import sys
    print(sys.modules)
    # print(sys.modules)
    # print(sys.modules['a'].Alipay)
    # print(a.Alipay)
    # print(getattr(a,'Alipay'))
    # print(getattr(sys.modules['a'],'Alipay'))
    
    # wahaha = 'hahaha'
    # print(getattr(sys.modules['__main__'],'wahaha'))
    #sys.modules['__main__'] 本模块
    
    class Payment:pass
    class Alipay(Payment):
        def __init__(self,name):
            self.name = name
        def pay(self,money):
            dic = {'uname':self.name,'price':money}
            print('%s通过支付宝支付%s钱成功'%(self.name,money))
    
    class WeChat(Payment):
        def __init__(self,name):
            self.name = name
        def pay(self,money):
            dic = {'username':self.name,'money':money}
            print('%s通过微信支付%s钱成功'%(self.name,money))
    
    class Apple(Payment):
        def __init__(self,name):
            self.name = name
        def pay(self,money):
            dic = {'name': self.name, 'number': money}
            print('%s通过苹果支付%s钱成功' % (self.name, money))
    
    class QQpay:
        def __init__(self,name):
            self.name = name
        def pay(self,money):
            print('%s通过qq支付%s钱成功' % (self.name, money))
    import sys
    
    def pay (name,price,kind):
        class_name = getattr(sys.modules['__main__'],kind)
        obj = class_name(name)
        obj.pay(price)
    
        # if kind == 'Wechat':
        #     obj = WeChat(name)
        # elif kind == 'Alipay':
        #     obj = Alipay(name)
        # elif kind == 'Apple':
        #     obj = Apple(name)
        # obj.pay(price)
    
    # pay('alex',400,'WeChat')
    # pay('alex',400,'Alipay')
    # pay('alex',400,'Apple')
    # pay('alex',400,'QQpay')
    

    反射的另一个函数 hasattr(一般成对使用)

    class A:
        Role = '治疗'
        def __init__(self):
            self.name = 'alex'
            self.age = 84
        def func(self):
            print('wahahaha')
            return 666
    a = A()
    print(hasattr(a,'sex'))#False  是否可反射到
    print(hasattr(a,'age'))#True
    print(hasattr(a,'func'))#True
    
    if hasattr(a,'func'):
        if callable(getattr(a,'func')):   #callable 是否可被调用(既判断是否可以在后面加())
            getattr(a,'func')()
    
  • 相关阅读:
    使用 ASP.NET Core MVC 创建 Web API(五)
    使用 ASP.NET Core MVC 创建 Web API(四)
    使用 ASP.NET Core MVC 创建 Web API(三)
    使用 ASP.NET Core MVC 创建 Web API(二)
    使用 ASP.NET Core MVC 创建 Web API(一)
    学习ASP.NET Core Razor 编程系列十九——分页
    学习ASP.NET Core Razor 编程系列十八——并发解决方案
    一个屌丝程序猿的人生(九十八)
    一个屌丝程序猿的人生(九十七)
    一个屌丝程序猿的人生(九十五)
  • 原文地址:https://www.cnblogs.com/wyh0717/p/13200276.html
Copyright © 2011-2022 走看看