我有一个超类,看起来像:
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
我想定义一些覆盖derun
方法以返回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
签名。
有没有一个Python的方法可以做到这一点?你知道吗
编辑:拥有超类是有原因的。在前一阶段(some_computational_expensive_method
)执行一些操作。因此,如果我想尝试这两种运行方法(如\u udp和\u tcp),我不想创建两个单独的对象(TCPChannel和UDPChannel)并使用它们自己的运行方法,因为这样会运行昂贵的任务。相反,我想创建一个Channel对象,并使用run
方法两次使用不同的参数。你知道吗
但是如果我不想使用UDP功能,我将使用简化版本“TCPChannel”。你知道吗
您可以匹配签名,并且仍然检查一致的用法。例如:
在我看来,基类不应该有if语句。你知道吗
我可以想象,tcp不需要像udp那样运行,所以重写的类应该包含按照它所属的通道类型运行的逻辑
基于您的编辑,我认为尝试为该函数提供一些随机值不是一个好主意,上面的解决方案应该仍然有效,但是您昂贵的方法应该直接调用
run_as_tcp
和run_as_udp
。你知道吗如果不调用
Channel
的run方法本身,可以执行以下操作相关问题 更多 >
编程相关推荐