【问题标题】:NotImplementedError: You should not call an overloaded functionNotImplementedError:你不应该调用重载函数
【发布时间】:2023-01-30 17:52:33
【问题描述】:
@overload
def setSize(self,size:tuple[int|str])->None:
    '''
    Set image size (width,height)
    '''
    try:self.options.append(f"width=\"{str(size[0])}\" height=\"{str(size[1])}\"")
    except IndexError:print("Error reading the size, aborting")
@overload
def setSize(self,width:int|str,height:int|str)->None:
    '''
    Set image Size
    '''
    self.setSize((width,height))

这是我的代码,我将此函数称为 var.setSize((500,500)) 通常会调用最上面的一个,但我收到了这个错误:

NotImplementedError: You should not call an overloaded function. A series of @overload-decorated functions outside a stub module should always be followed by an implementation that is not @overload-ed.

【问题讨论】:

  • 从错误消息来看,其中一个函数似乎必须在没有 @overload 注释的情况下声明。你试过了吗?
  • 但是我怎么知道哪个会运行,它们不是满足其中一个参数实例的蓝图吗?

标签: python overloading


【解决方案1】:

在 Python 中编写带有函数重载的代码时,请务必记住不应调用重载函数。存根模块外部的一系列 @overload-decorated 函数应该始终跟随一个不是 @overload-ed [1][2] 的实现。这是因为 @overload-ed 函数旨在简单地声明参数的类型而不提供实际的实现。因此,为了使代码有效,必须在@overload-ed 函数之后提供一个实现。

【讨论】:

    猜你喜欢
    • 2018-12-02
    • 2011-07-17
    • 2022-12-17
    • 2018-05-14
    • 2022-07-06
    • 2014-06-18
    • 2010-11-17
    • 2012-07-11
    • 1970-01-01
    相关资源
    最近更新 更多