#起因
最近一直在写数据构造器,所有的虚假数据均调用的是一个
Methor
类,需要用到类反射。
#采取的做法
#方法一
为了方便,采取了
eval()
将组合成的方法名字符串运行成函数,刚开始很正常,但是一看速度,心态炸了啊!!!!!平均需要0.03s一次…
class Methors(object):
def test(self):
print("test")
eval(f"Methors().test()")
#方法二
采用正常的类反射来做,速度翻了几百倍,终于舒服了,现在数据能够每秒几万条了…
class Merhors(object):
def test(self):
print("test")
getattr(Methor(), 'test')()
#结论
虽然两种方法都可以实现,但是效果差别很多,类似的还有
local()
用法。具体原理目前不明,这几天没时间探究,改天再来。个人猜测是前者涉及到转换数据类型,后者估计是直接尝试调用,然后返回调用地址(瞎猜…)