day07-02-反射
Posted 雷大侠!
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了day07-02-反射相关的知识,希望对你有一定的参考价值。
反射:通过字符串映射或修改程序运行时的状态、属性、方法python中的反射功能是由以下四个内置函数提供:hasattr、getattr、setattr、delattr,改四个函数分别用于对对象内部执行:检查是否含有某成员、获取成员、设置成员、删除成员。
hasattr(obj,name_str) , 判断一个对象obj里是否有对应的name_str字符串的方法
getattr(obj,name_str), 根据字符串去获取obj对象里的对应的方法的内存地址,进行调用
setattr(obj,name_str,bulk) 其中obj.name_str=bulk,下面若输入talk字符串,则d.talk = bulk,下面对象调用d.talk即可调用函数bulk进入类内部
d.talk(d)
# 删除输入的属性
delattr(obj,name_str)
- def bulk(self):
- print("%s is yelling...." %self.name)
- class Dog(object):
- def __init__(self,name):
- self.name = name
- def eat(self,food):
- print("%s is eating..."%self.name,food)
- d = Dog("zlz")
- choice = input(">>:").strip()
- # 判断有没有
- if hasattr(d,choice):
- # 删除输入的属性
- delattr(d,choice)
- # 调用,映射除了调用方法的内存地址
- getattr(d,choice)
- else:
- setattr(d,choice,bulk) #若输入talk字符串,则d.talk = bulk,下面对象调用d.talk即可调用函数bulk进入类内部
- d.talk(d)
- func = getattr(d, choice)
- func(d)
- print(d.name)
- # 输出
- # >>:talk
- # zlz is yelling....
- # zlz is yelling....
- #错误
- # >>:name
- # Traceback (most recent call last):
- # File "E:/Python/第07周-Python3.5-零基础-高级-完整项目剖析-共14章节/源码/反射.py", line 21, in <module>
- # getattr(d,choice)
- # AttributeError: ‘Dog‘ object has no attribute ‘name‘
以上是关于day07-02-反射的主要内容,如果未能解决你的问题,请参考以下文章