小猿会从最基础的面试题开始,每天一题。如果参考答案不够好,或者有错误的话,麻烦大家可以在留言区给出自己的意见和讨论,大家是要一起学习的 。
废话不多说,开始今天的题目:
问:说说Python中的反射?
答:在反射机制就是在运行时,动态的确定对象的类型,并可以通过字符串调用对象属性、方法、导入模块,是一种基于字符串的事件驱动。通过字符串的形式,去模块寻找指定函数,并执行。利用字符串的形式去对象(模块)中操作(查找/获取/删除/添加)成员。
Python是一门解释型语言,因此对于反射机制支持很好。在Python中支持反射机制的函数有getattr()、setattr()、delattr()、exec()、eval()、__import__,这些函数都可以执行字符串。
在 Python 中,反射的实现很简单,主要通过以下 4 个函数:
1、getattr()
# getattr 语法 getattr(object,name[,default]) #参数 # · object -- 对象 # · name -- 字符串,对象属性 # · default-- 默认返回值,如果不提供该参数,在没有对应属性时,将触发AttrbuteError. # 返回值 :返回对象属性值
2、hasattr()
# hasattr 语法 hasattr(object,name) #参数 # · object -- 对象 # · name -- 字符串,属性名 # 返回值 :如果对象有该属性返回 True,否则返回 False。
3、setattr()
# setattr 语法 setattr(object, name, value) #参数 # · object -- 对象 # · name -- 字符串,属性名 # · value -- 属性值。 # 返回值 :无
4、delattr()
delattr(object, name) delattr() 函数用来删除指定对象的指定名称的属性,和setattr函数作用相反,属性必须存在,否则发出AttributeError。 This is a relative of setattr(). The arguments are an object and a string. The string must be the name of one of the object’s attributes. The function deletes the named attribute, provided the object allows it. For example, delattr(x, 'foobar') is equivalent to del x.foobar.
由于篇幅关系,具体的代码,给大家一个参考链接:
如果对于参考答案有不认同的,大家可以在评论区指出和补充,欢迎留言!