将self对象传递给需要此类型的函数

时间:2016-11-24 19:23:44

标签: python oop overloading

我想编写一个类函数,它将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之后,我的代码进入无限递归循环并抛出此站点的名称作为异常。我的问题是:

  1. 我是否正确使用python函数重载机制?

  2. 如何将*此参数传递给我班级中的类函数?

1 个答案:

答案 0 :(得分:1)

  

我是否正确使用python函数重载机制?

你不能拥有两个同名的功能; Python不支持基于参数类型的重载。第二个函数的定义将覆盖第一个函数的定义。

从本质上讲,你一遍又一遍地调用非classmethod函数copy。您需要重命名其中一个才能使其有效运行。

  

如何将*此参数传递给我班级中的类函数?

我猜你的意思是self;将self传递给另一个函数与其他任何arg一样(就像你FragmentsSignal.copy(self)一样)。你的问题是你被类似名称引起的递归所困扰。