反射(getattr)

反射的定义

用字符串数据类型的变量名来访问这个变量,所有用 ’ . ’ 来执行的方法,都可以用 getattr(命名空间, 字符串)

例子

userinfo

import sys


class Airline:
    dic = {'1': 'create',
           '2': 'find'}

    def __init__(self, name):
        self.name = name

    def create(self):
        print('成功成立了公司,名字是%s' % self.name)

    def find(self):
        print('%s已在注册当中' % self.name)


class Company:
    dic = {'1': 'money',
           '2': 'get_out'}

    def __init__(self, name):
        self.name = name

    def money(self):
        print('成功给%s发了工资' % self.name)

    def get_out(self):
        print('成功开除了%s'
              % self.name)

#登录程序
def login():
    name = input('用户名:')
    password = input('密码:')
    with open('userinfo') as f:  # userinfo是一个文件自己定义如上图
        for item in f:
            na, pd, pos = item.strip().split('|')
            if name == na and password == pd:
                print('登陆成功')
                return name, pos


def main():
    name, pos = login()
    print('名字, 位置:', name, pos)
    myfile = sys.modules['__main__'] #利用sys来获取函数锁在空间
    cls = getattr(myfile, pos) #pos的内容为Airline或Company,cls即为获取到的 类Airline或 Company
    obj = cls(name) #类加括号完成实例化
    while True:
        print(obj.dic)
        func = input('请输入需要的功能>>')
        getattr(obj, cls.dic[str(func)])()


main()```

## 关于setattr

```python
class A:

    def __getitem__(self, item):
        print('执行__getitem__', item)
        return getattr(self, item)

    def __setitem__(self, key, value):
        setattr(self, key, value)


a = A()
a['b'] = 11  # 当执行这个方法时,调用 __setitem__方法,'b'传入key,11传入 value.通过setattr完成了self.key = value即a['b'] = 11
print(a['b'])
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

宇锅锅拆飞机

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值