【一】反射
【1】什么是反射#
- 反射是一种程序可以判断,取出和修改其本地状态或行为的能力
- 在python中,反射主要是指通过字符串操作对象属性
【2】Python中的反射#
- 同过字符串的形式操作对象相关的属性
- python一切皆为对象,都可以使用反射
【二】反射方法
【1】反射方法介绍#
getatter(object,'name'[default])
hasatter(object,name)
setatter(object,name,value)
delatter(object,name)
【2】反射方法使用#
(1)引入#
class Car:
def __init__(self, name):
self.name = name
def wheel(self):
print('我有四个轮子')
def run(self):
print('我会跑')
car = Car(name='汽车')
print(car.name)
print(car.__dict__)
print(car.__dict__['name'])
print(dir(car))
"""
汽车
{'name': '汽车'}
汽车
['__class__', '__delattr__', '__dict__', '__dir__', '__doc__', '__eq__', '__format__', '__ge__', '__getattribute__', '__getstate__', '__gt__', '__hash__', '__init__', '__init_subclass__', '__le__', '__lt__', '__module__', '__ne__', '__new__', '__reduce__', '__reduce_ex__', '__repr__', '__setattr__', '__sizeof__', '__str__', '__subclasshook__', '__weakref__', 'name', 'run', 'wheel']
"""
(2)getatter#
getatter(object,name[default])
class Car:
def __init__(self, name):
self.name = name
def wheel(self):
print('我有四个轮子')
def run(self):
print('我会跑')
car = Car(name='汽车')
print(getattr(car, 'name'))
(3)hasattr#
class Car:
def __init__(self, name):
self.name = name
def wheel(self):
print('我有四个轮子')
def run(self):
print('我会跑')
car = Car(name='汽车')
print(hasattr(car, 'name'))
print(hasattr(car, 'x'))
(4)setattr#
setattr(object,'name',value)
class Car:
def __init__(self, name):
self.name = name
def wheel(self):
print('我有四个轮子')
def run(self):
print('我会跑')
car = Car(name='汽车')
setattr(car, 'name', '迈巴赫')
print(car.name)
(5)delattr#
class Car:
def __init__(self, name):
self.name = name
def wheel(self):
print('我有四个轮子')
def run(self):
print('我会跑')
car = Car(name='汽车')
delattr(car, 'name')
【3】拓展#
(1)类也是对象#
- 在Python中一切皆对象,所以类也可以是反射方法中的第一个参数。
class Car:
def __init__(self, name):
self.name = name
def wheel(self):
print('我有四个轮子')
def run(self):
print('我会跑')
print(getattr(Car, 'wheel'))
print(hasattr(Car, 'wheel'))
print(setattr(Car, 'age', 18))
print(Car.age)
delattr(Car, 'wheel')
print(hasattr(Car, 'wheel'))
【三】反射的好处
【1】实现可插拔机制#
- 反射的好处就是,可以事先定义好接口,接口只有在被完成后才会真正执行,这实现了即插即用,这其实是一种‘后期绑定’,意味着可以在程序运行过程中动态地绑定接口的实现。
- 这种灵活性使得程序更容易扩展和维护。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧
· 【自荐】一款简洁、开源的在线白板工具 Drawnix
· 园子的第一款AI主题卫衣上架——"HELLO! HOW CAN I ASSIST YOU TODAY
· Docker 太简单,K8s 太复杂?w7panel 让容器管理更轻松!