Python—面向对象05 反射

Posted 郭东东郭

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Python—面向对象05 反射相关的知识,希望对你有一定的参考价值。

反射,通过字符串映射到对象属性

?

class People:
    country='China'

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

    def talk(self):
        print('%s is talking' %self.name)


p = People("gd", 22)
print(p.name)  # p.__dic__['name']
print(p.talk)  # <bound method People.talk of <__main__.People object at 0x00000000027B7470>>


print(hasattr(p, 'name'))  # True 判断 对象p 里有没有 name 属性, hasattr(),第一个参数传对象,第二个参数传 属性名
print(hasattr(p, 'talk1'))  # True

print(getattr(p, 'name'))  # gd  拿到 对象 p 里的属性
# print(getattr(p, 'name2')) # AttributeError: 'People' object has no attribute 'name2'
# getattr(), 没有相应属性的时候,会报错,我们可以传入第三个参数
print(getattr(p, 'name2', None))  # None  这样,找不到属性的时候就会返回 None 了


setattr(p, 'sex', '机器大师')
print(p.sex)  # 机器大师


print(p.__dict__)  # {'name': 'gd', 'age': 22, 'sex': '机器大师'}
delattr(p, 'sex')  # 删除属性
print(p.__dict__)  # {'name': 'gd', 'age': 22}


# hasattr()  getattr()   setatter()  delattr() 不仅适用于对象,也可以用于类
print(hasattr(People, 'country'))  # True
print(getattr(People, 'country'))  # China

?

?

反射的应用

class Service:
    def run(self):
        while True:
            cmd = input(">>:").strip()
            if hasattr(self, cmd):
                func = getattr(self, cmd)
                func()

    def get(self):
        print('get......')

    def put(self):
        print('put.....')


obj = Service()
obj.run()

# >>:get
# get......
# >>:put
# put.....

以上是关于Python—面向对象05 反射的主要内容,如果未能解决你的问题,请参考以下文章

python面向对象之反射

Python之面向对象-反射

Python面向对象 | 反射

Python面向对象反射,双下方法

Python面向对象之反射,双下方法

python面向对象的反射