我有一个超类,看起来像:覆盖超类的方法,以返回另一个supeclass方法
class Channel:
def __init__(self):
# Mutual preparation stuff
self.some_computational_expensive_method()
def run(self, conf, method="tcp"):
if method == "tcp":
return self.run_as_tcp(conf)
elif method == "udp":
return self.run_as_udp(conf)
else:
raise ValueError
我要定义一些孩子(简化版本)类,覆盖德run
方法返回要么run_as_tcp
或run as udp
,如:
class TCPChannel(Channel):
def run(self, conf):
return self.run_as_tcp(conf)
class UDPChannel(Channel):
def run(self, conf):
return self.run_as_udp(conf)
但如果我这样做(覆盖的方法),我不匹配Channel
类的run
签名。 有没有一种pythonic方式来做到这一点?
编辑:有一个理由有超类。在前一阶段(some_computational_expensive_method
)执行一些操作。因此,如果我想尝试两种运行方法(as_udp和as_tcp),我不想创建两个单独的对象(TCPChannel和UDPChannel)并使用它们自己的运行方法,因为这会运行昂贵的任务。相反,我想创建一个Channel对象,并使用两次使用不同参数的方法。
但是如果我不想要UDP功能,我将使用简化版本'TCPChannel`。
检查了这一点。 http://stackoverflow.com/questions/10202938/how-do-i-use-method-overloading-in-python – Prajwal
但你为什么要这样做?为什么在这里使用继承?看起来'Channel'已经被设计用来做你需要的一切。 –
@ juanpa.arrivallaga我需要编写一个API,我需要定义它,让我们说,“元”类,然后是一些特定的方法类。我知道这听起来很奇怪,但我需要去做。 –