我想编写一个类函数,它将Signal对象作为参数并返回其副本。然后我想用一个返回self参数副本的实例函数重载这个函数。我有以下代码:
@classmethod
def copy(cls, arg):
if not isinstance(arg, Signal):
raise ValueError("Argument must be of type Signal")
result = Signal()
result.framerate = arg.framerate
return result
def copy(self):
return FragmentsSignal.copy(self)
和
Signal1 = Signal(100)
Signal2 = signal1.copy()
但是在调用函数copy之后,我的代码进入无限递归循环并抛出此站点的名称作为异常。我的问题是:
我是否正确使用python函数重载机制?
如何将*此参数传递给我班级中的类函数?
答案 0 :(得分:1)
我是否正确使用python函数重载机制?
你不能拥有两个同名的功能; Python不支持基于参数类型的重载。第二个函数的定义将覆盖第一个函数的定义。
从本质上讲,你一遍又一遍地调用非classmethod
函数copy
。您需要重命名其中一个才能使其有效运行。
如何将*此参数传递给我班级中的类函数?
我猜你的意思是self
;将self
传递给另一个函数与其他任何arg一样(就像你FragmentsSignal.copy(self)
一样)。你的问题是你被类似名称引起的递归所困扰。