反射
反射的概念是由Smith在1982年首次提出的,主要是指程序可以访问、检测和修改它本身状态或行为的一种能力
例如我以前曾使用过:
if type(test) == list:
#填写代码
上述过程也就是一个反射的过程
在程序运行的时候,我们若获得一个不知道有何种属性的对象,如果想操作其内部属性,我们可以先通过一个内置函数dir()来获得任意一个类的各种属性以及方法
class Student:
def __init__(self,name,age):
self.name = name
self.age = age
student = Student('sadness',18)
print(dir(student))
那么接下来就是如何操作类的属性了
这就涉及到四个内置函数了hasattr、getattr、setattr、delattr
class Student:
def __init__(self,name,age):
self.name = name
self.age = age
student = Student('sadness',18)
#判断是否有属性
print(hasattr(student,'name'))
# #获得属性
# getattr()
print(getattr(student,'name'))
#
# #设置属性
# setattr()
setattr(student,'name','sadnesspineapple')
print(getattr(student,'name'))
# #删除属性
# delattr()
delattr(student,'name')
print(hasattr(student,'name'))
>>>True
>>>sadness
>>>sadnesspineapple
>>>False
这下我们就可以通过这些基本的方法去实现一些功能
内置函数补充:
isinstance
专门用来判断是不是某一个类型时使用
list_test = []
res = isinstance(list_test, list)
print(res)
issubclass
判断一个类是不是另一个类的子类
class People:
pass
class Student(People):
pass
student = Student()
res = issubclass(Student,People)
print(res)