python类反射

#起因

最近一直在写数据构造器,所有的虚假数据均调用的是一个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()用法。

具体原理目前不明,这几天没时间探究,改天再来。个人猜测是前者涉及到转换数据类型,后者估计是直接尝试调用,然后返回调用地址(瞎猜…)

updatedupdated2021-09-132021-09-13