Matlab对象数组批量调用类方法的Python等效实现咨询
Matlab对象数组批量调用类方法的Python等效实现咨询
最近在把Matlab代码往Python迁移时,卡在了对象集合批量调用类方法这个点上,想和大家聊聊这个差异和现有解决思路:
在Matlab里,对象数组的批量方法调用体验特别顺畅。比如我定义了Class1类,创建对象数组后,直接对整个数组调用类方法,就能自动给每个元素执行方法并返回结果集合:
A = [Class1(1), Class1(2)]; B = A.toClass2();
这种原生支持的写法完全不用手动处理遍历,简洁又省心。
但到了Python里这套逻辑就行不通了。如果我创建一个Class1实例的列表,直接写B = A.toClass2()的话,Python解释器会去list类里找toClass2方法,结果必然是报错——毕竟列表本身根本没有这个自定义方法。
我自己摸索了几种在不修改类方法定义的前提下,用户侧可以实现批量调用的方式:
- 用for循环逐个遍历对象调用方法
- 用列表推导式简化循环写法
- 用
map搭配普通函数或者lambda表达式 - 甚至可以借助
numpy.vectorize()来实现
不过这些方法都有个共同问题:语法复杂度比Matlab的原生写法高不少,而且总觉得还缺了点什么,要是能有像Matlab那样简洁的语法就完美了。
备注:内容来源于stack exchange,提问作者Miels
相关产品推荐
相关产品推荐

