Iva*_*ets 1 python multiple-dispatch magic-methods
我非常喜欢"魔术方法"的语法或者在Python中调用的任何语法,比如
class foo:
def __add__(self,other): #It can be called like c = a + b
pass
Run Code Online (Sandbox Code Playgroud)
电话
c = a + b
Run Code Online (Sandbox Code Playgroud)
然后被翻译成
a.__add__(b)
Run Code Online (Sandbox Code Playgroud)
是否有可能模仿"非魔法"功能的这种行为?在数值计算中,我需要Kronecker产品,并且渴望拥有"kron"功能
kron(a,b)
Run Code Online (Sandbox Code Playgroud)
实际上是
a.kron(b)?
Run Code Online (Sandbox Code Playgroud)
用例是:我有两个类似的类,比如,矩阵和向量,都有Kronecker产品.我想打电话给他们
a = matrix()
b = matrix()
c = kron(a,b)
a = vector()
b = vector()
c = kron(a,b)
Run Code Online (Sandbox Code Playgroud)
矩阵和向量类在一个.py文件中定义,因此共享公共命名空间.那么,实现上述功能的最佳(Pythonic?)方式是什么?可能的解决方案:
1)有一个kron()函数并进行类型检查
2)具有不同的名称空间
3)?
python默认运算符方法(__add__等)是硬连线的; python将查找它们,因为运算符实现会查找它们.
但是,没有什么可以阻止你定义一个kron做同样事情的函数; 寻找__kron__或__rkron__传递给它的对象:
def kron(a, b):
if hasattr(a, '__kron__'):
return a.__kron__(b)
if hasattr(b, '__rkron__'):
return b.__rkron__(a)
# Default kron implementation here
return complex_operation_on_a_and_b(a, b)
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
285 次 |
| 最近记录: |