Python:反射getattr\setattr\hasattr\delattr

#  问题:什么时候用类方法

# 反射,提供更加灵活的方式去实现去对象中操作成员
# getattr\setattr\hasattr\delattr
class Person(object):
    def __init__(self, name, age):
        self.name = name
        self.age = age

    def show(self):
        message = '{}_{}'.format(self.name, self.age)


obj = Person('张学友', 28)
v1 = getattr(obj, 'name')  # 获取成员,可以在成员名称后加None,如果不存在则返回None
print(v1)  # 张学友
v2 = setattr(obj, 'area', '香港')  # 设置新成员
print(obj.area)  # 香港
v3 = hasattr(obj, 'area')  # 判断是否存在
print(v3)  # True
delattr(obj, 'age')  # 删除成员
print(obj.age)  # 报错

# import module + 反射,最小导入模块级别
from importlib import import_module

import requests.exceptions

m = import_module('random')  # 等价import random
v1 = m.randint(1, 100)  # 等价于random.randint(1,100)
print(v1)

from requests.exceptions import InvalidURL

m = import_module('requests.exceptions.InvalidURL')  # 会报错
n = import_module('requests.exceptions')  # 正确做法
l = n.InvalidURL
上一篇:Java-基于JDK的动态代理


下一篇:小程序上传图片到服务器