目录
  1. 1. 起因
  2. 2. 采取的做法
    1. 2.1. 方法一
    2. 2.2. 方法二
  3. 3. 结论
python类反射

起因

最近一直在写数据构造器,所有的虚假数据均调用的是一个Methor类,需要用到类反射。

采取的做法

方法一

为了方便,采取了eval()将组合成的方法名字符串运行成函数,刚开始很正常,但是一看速度,心态炸了啊!!!!!平均需要0.03s一次…

1
2
3
4
class Methors(object):
def test(self):
print("test")
eval(f"Methors().test()")

方法二

采用正常的类反射来做,速度翻了几百倍,终于舒服了,现在数据能够每秒几万条了…

1
2
3
4
class Merhors(object):
def test(self):
print("test")
getattr(Methor(), 'test')()

结论

虽然两种方法都可以实现,但是效果差别很多,类似的还有local()用法。

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

文章作者: ZyTomorrow
文章链接: https://zytomorrow.top/2019/06/24/python/python-lei-fan-she/
版权声明: 本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来自 Tomorrow
打赏
  • 微信
  • 支付寶

评论