【问题标题】:How to override overloaded functions in python如何覆盖python中的重载函数
【发布时间】:2018-05-03 04:00:29
【问题描述】:

(Python 挤压) 我正在覆盖以下方法-

installEventHandler(eventName, handlerFunctionName);

installEventHandler(className, eventName, handlerFunctionName);

installEventHandler(object, eventName, handlerFunctionName);

在我的方法中,

def MyinstallEventHandler(???)

我不确定我应该在我的函数中定义什么,以便我可以覆盖所有方法。

当我尝试传递 *args 时,它被视为元组并且与上述任何方法都不匹配。

重载的方法是 squish 的。我想覆盖以上三种方法,但我找不到任何解决方案。

【问题讨论】:

  • Python 没有重载函数。
  • 另外,如果你通过*args,它不被认为是一个元组;它被扩展为单独的参数。例如,args = [1,2,3]; f(*args) 调用 f(1, 2, 3)。当您在def接受 *args 时,您可能会混淆。在这种情况下,您确实将所有参数作为一个元组获取——但随后要将它们作为单独的参数传递,您只需在调用中再次使用*args。这可能正是您在这里寻找的。​​span>
  • 似乎eventNamehandlerFunctionName 都是强制性的;也许是一个接受classNameobject 作为可选参数的函数(默认为None)?

标签: python qt overloading overriding squish


【解决方案1】:

查看这些examples,似乎调用installEventHandler(*args),其中args 是一组合适的参数(2 或3)就足够了。如果您想创建自己的使用其他参数的installEventHandler,只需创建您想要创建的内容并执行此操作,以便您可以调用原始installEventHandler

关于重载的说明:

内置 Python 不允许处理重载。但是,您可能希望使用单个调度,它允许您根据 first 参数的类型处理简单的情况。 singledispatch 装饰器在 functools 中实现。

overloading 包通过查看参数的类型为您提供更复杂的重载函数支持。根据您的 Python 版本,您可能需要更改某些行以保持typing 的兼容性。

在你的情况下,不可能应用这些解决方案,因为你的原始方法没有用合适的装饰器装饰。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2018-12-08
    • 2012-04-03
    • 2021-12-12
    • 2012-08-08
    • 1970-01-01
    • 2011-04-26
    • 1970-01-01
    • 2011-01-29
    相关资源
    最近更新 更多