说说Python中的反射是什么?
公众号新增加了一个栏目,就是每天给大家解答一道Python常见的面试题,反正每天不贪多,一天一题,正好合适,只希望这个面试栏目,给那些正在准备面试的同学,提供一点点帮助!
小猿会从最基础的面试题开始,每天一题。如果参考答案不够好,或者有错误的话,麻烦大家可以在留言区给出自己的意见和讨论,大家是要一起学习的 。
废话不多说,开始今天的题目:
问:说说Python中的反射?
答:在反射机制就是在运行时,动态的确定对象的类型,并可以通过字符串调用对象属性、方法、导入模块,是一种基于字符串的事件驱动。通过字符串的形式,去模块寻找指定函数,并执行。利用字符串的形式去对象(模块)中操作(查找/获取/删除/添加)成员。
Python是一门解释型语言,因此对于反射机制支持很好。在Python中支持反射机制的函数有getattr()、setattr()、delattr()、exec()、eval()、__import__,这些函数都可以执行字符串。
在 Python 中,反射的实现很简单,主要通过以下 4 个函数:
1、getattr()
# getattr 语法
getattr(object,name[,default])
#参数
# · object -- 对象
# · name -- 字符串,对象属性
# · default-- 默认返回值,如果不提供该参数,在没有对应属性时,将触发AttrbuteError.
# 返回值 :返回对象属性值
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.
由于篇幅关系,具体的代码,给大家一个参考链接:
https://blog.csdn.net/perfect1t/article/details/80825372
如果对于参考答案有不认同的,大家可以在评论区指出和补充,欢迎留言!
更多题目:
关注小猿公众号,每天学习一道题