我真的很喜欢“魔法方法”的语法或者它们在 Python 中的任何称呼,比如
class foo:
def __add__(self,other): #It can be called like c = a + b
pass
电话
c = a + b
然后被翻译成
a.__add__(b)
是否可以为“非魔法”功能模仿这种行为?在数值计算中,我需要克罗内克积,并且渴望拥有这样的“kron”函数
kron(a,b)
事实上
a.kron(b)?
用例是:我有两个相似的类,比如矩阵和向量,它们都有克罗内克积。我想调用他们
a = matrix()
b = matrix()
c = kron(a,b)
a = vector()
b = vector()
c = kron(a,b)
矩阵和向量类定义在一个 .py 文件中,因此共享公共(public)命名空间。那么,实现上述功能的最佳(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)
