如何将 singledispatchmethod 与继承类一起使用

2024-01-04

在我的代码中,我有以下课程:

class A:
  @functools.singledispatchmethod
  def handle(arg):
     pass

我想要其他类继承A并重载泛型方法handle像这样:

class B(A):
   @handle.register
   def handle_int(arg: int):
       return arg + 2

但是,我收到错误:

未解析的引用“句柄”

如何在基类中创建这个通用方法? (我不想在每个子类中创建这个函数来使用singledispatchmethod.)


不理想的方法

由于您指的是类中定义的方法A你必须使用来表明它@A.handle.register:

class B(A):
   @A.handle.register
   def handle_int(arg: int):
       return arg + 2
Issue

但是当存在另一个类时,这种方法会引起问题C,也继承自A但支持handle(arg: str). Then C().handle(2)将从类中调用方法B自从它被注册到A方法(即使它应该最终出现在类中A基本句柄方法)。

更好的方法

上述解决方案的明显问题是一个注册类(A),所以我在所有派生类中添加注册,但将处理留给基类,以防派生类中没有适当的类型专用类方法。

import functools

class A:
  @functools.singledispatchmethod
  def handle(arg):
     print(f'\tA handle (arg: {arg})')

class B(A):
    @functools.singledispatchmethod
    @classmethod
    def handle(cls, arg):
        print(f'\tB handle (arg: {arg})')
        return super(B, cls).handle(arg)


@B.handle.register
def handle_int(arg: int):
    print(f'\tB int (arg: {arg})')
    return arg + 2


class C(A):
    @functools.singledispatchmethod
    @classmethod
    def handle(cls, arg):
        print(f'\tC handle (arg: {arg})')
        return super(C, cls).handle(arg)

@C.handle.register
def handle_str(arg: str):
    print(f'\tC str (arg: {arg})')
    return arg + ' 2'

print('\nA')
A.handle(2)
A.handle('2+')

print('\nB')
B.handle(2)
B.handle('2+')

print('\nC')
C.handle(2)
C.handle('2+')

Result:

A
    A handle (arg: 2)
    A handle (arg: 2+)

B
    B int (arg: 2)
    B handle (arg: 2+)
    A handle (arg: 2+)

C
    C handle (arg: 2)
    A handle (arg: 2)
    C str (arg: 2+)
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何将 singledispatchmethod 与继承类一起使用 的相关文章

  • 如何使用一个模型中间层的输出作为另一个模型的输入?

    我训练一个模型A并尝试使用中间层的输出name layer x 作为模型的附加输入B 我尝试像 Keras 文档一样使用中间层的输出https keras io getting started faq how can i obtain th
  • 使用 apply 方法的泛型类型的 Scala 工厂?

    假设我有以下特征 它定义了一个接口并采用几个类型参数 trait Foo A B implementation details not important 我想使用伴随对象作为该特征的具体实现的工厂 我还想强制用户使用Foo接口而不是子类所
  • 查找正在导入哪些 python 模块

    从应用程序中使用的特定包中查找所有 python 模块的简单方法是什么 sys modules是将模块名称映射到模块的字典 您可以检查其键以查看导入的模块 See http docs python org library sys html
  • App Engine NDB:如何访问属性的 verbose_name

    假设我有这个代码 class A ndb Model prop ndb StringProperty verbose name Something m A m prop a string value 当然 现在如果我打印 m prop 它会
  • 用 Python 绘制直方图

    我有两个列表 x 和 y x 包含字母表 A Z Y 包含它们在文件中的频率 我尝试研究如何在直方图中绘制这些值 但在理解如何绘制它方面没有成功 n bins patches plt hist x 26 normed 1 facecolor
  • 高级描述熊猫

    有没有像 pandas 那样更高级的功能 通常我会继续这样 r pd DataFrame np random randn 1000 columns A r describe 我会得到一份很好的总结 就像这样 A count 1000 000
  • 将 window.location 传递给 Flask url_for

    我正在使用 python 在我的页面上 当匿名用户转到登录页面时 我想将一个变量传递到后端 以便它指示用户来自哪里 发送 URL 因此 当用户单击此锚链接时 a href Sign in a 我想发送用户当前所在页面的当前 URL
  • 使用 Python 绘制 USGS 水文数据甘特图?

    我编译了一个数据帧 其中包含几个不同流计的 USGS 流数据 现在我想创建一个类似的甘特图this https stackoverflow com questions 31820578 how to plot stacked event d
  • Python:在字典中查找具有唯一值的键?

    我收到一个字典作为输入 并且想要返回一个键列表 其中字典值在该字典的范围内是唯一的 我将用一个例子来澄清 假设我的输入是字典 a 构造如下 a dict a cat 1 a fish 1 a dog 2 lt unique a bat 3
  • Java中未绑定通配符泛型的用途和要点是什么?

    我不明白未绑定通配符泛型有什么用 具有上限的绑定通配符泛型 stuff for Object item stuff System out println item Since PrintStream println 可以处理所有引用类型 通
  • python Recipe:列出最接近等于值的项[关闭]

    Closed 这个问题需要多问focused help closed questions 目前不接受答案 考虑像这样的列表 0 3 7 10 12 15 19 21 我想获得最接近任何值的最近的最小数字 所以如果我通过4 我会得到3 如果我
  • 为什么 Collections.counter 这么慢?

    我正在尝试解决罗莎琳德的基本问题 即计算给定序列中的核苷酸 并在列表中返回结果 对于那些不熟悉生物信息学的人来说 它只是计算字符串中 4 个不同字符 A C G T 出现的次数 我期望collections Counter是最快的方法 首先
  • 如何获取分类数据的分组条形图

    I have a big dataset with information about students And I have to build a graph of dependencies between different value
  • 如何在matplotlib中调整x轴

    I have a graph like this x轴上的数据表示小时 所以我希望x轴设置为0 24 48 72 而不是现在的值 很难看到 0 100 之间的数据 fig1 plt figure ax fig1 add subplot 11
  • 无法导入QUERY_TERMS

    我正在运行一个网站Python and Django Django filters 2 1 installed Django 2 1 installed 当我运行时 我收到以下错误 importError Could not import
  • 从迭代器外部将 StopIteration 发送到 for 循环

    有几种方法可以打破一些嵌套循环 他们是 1 使用中断 继续 for x in xrange 10 for y in xrange 10 print x y if x y gt 50 break else continue only exec
  • 无法让gunicorn使用Python 3

    我有 Ubuntu NGINX Gunicorn 以及可与 Python 3 设置配合使用的虚拟环境 但我的 Flask 应用程序仍然以 2 7 6 运行 我已系统地按照说明进行操作 但找不到解决方案 Gunicorn 配置文件 progr
  • python中有没有一种方法可以将存储在列表中的正则表达式模式列表应用到单个字符串?

    我有一个正则表达式模式列表 存储在列表类型中 我想将其应用于字符串 有谁知道一个好方法 将列表中的每个正则表达式模式应用于字符串 和 如果匹配 则调用与列表中该模式关联的不同函数 如果可能的话我想用 python 来做这件事 提前致谢 im
  • 使用 MPI 的 Allreduce 对 Python 对象求和

    我正在使用使用 Python 中的字典和计数器构建的稀疏张量数组操作 我想让并行使用这个数组操作成为可能 最重要的是 我最终在每个节点上都有计数器 我想使用 MPI Allreduce 或另一个不错的解决方案 将其添加在一起 例如 使用计数
  • 基于值的 matplotlib 条形图颜色

    有没有一种方法可以根据条形图的值对条形图的条形进行着色 例如 values below 0 5 red values between 0 5 to 0 green values between 0 to 08 blue etc 我找到了一些

随机推荐

  • Android 中是否有 API 支持以编程方式进行电话会议?

    我想通过从我的应用程序中选择一些联系人来进行电话会议 可以吗 电话会议中的设备数量是否有限制 有没有 Android SDK 支持 任何版本都适合我吗 请提供一些意见 提前致谢 您无法使用智能手机管理会议 您需要一个可以为您完成此操作的中间
  • django 脆皮形式 内联表单

    我正在尝试采用脆形式和引导程序 并尽可能多地使用它们的功能 而不是一遍又一遍地发明一些东西 有没有一种方法可以像 django admin 表单那样使用 Cripy forms bootstrap 来实现内联表单功能 这是一个例子 clas
  • 如何在 Perl 中连接两个散列而不使用循环?

    如何在 Perl 中将哈希 a 附加到哈希 b 而不使用循环 如果您的意思是合并他们的数据 只需执行以下操作 c a b
  • 如何在Python中用单反斜杠替换双反斜杠? [复制]

    这个问题在这里已经有答案了 我有一根绳子 该字符串中有双反斜杠 我想用单反斜杠替换双反斜杠 以便可以正确解析 unicode 字符代码 Pdb p fetched page p style text align center align c
  • 在 Android Studio 中导入 Facebook 库:找不到属性“ANDROID_BUILD_SDK_VERSION”

    我想将库项目导入到我的应用程序中 但每当我尝试这样做时 Android Studio 都无法识别它 它还在 build gradle 中给了我错误 该库是 PagerSlidingTabStrip 以下是一些图片 到目前为止我已经尝试了三天
  • .NET StringBuilder 在前面添加一行

    我知道System Text StringBuilder在 NET中有一个AppendLine 方法 但是 我需要在 a 的开头预先附加一行StringBuilder 我知道你可以使用Insert 附加一个字符串 但我似乎无法用一行来做到这
  • @Scheduled 方法内部的 Spring @Async 方法调用

    我正在使用 Spring boot EnableScheduling and EnableAsync 我有一个注释为的方法 Scheduled 我还有几个方法 注释为 Async 现在我称这些为 Async中的方法 Scheduled方法并
  • 在Powershell中使用Import-CSV,忽略注释行

    我认为我一定错过了一些明显的东西 因为我正在尝试使用 Import CSV 导入已在文件顶部注释掉行 始终以 作为第一个字符开头 的 CSV 文件 因此文件看起来像这样 SpecialCSV Version 1 0 0 Table Head
  • R,dplyr:如果每组只有一个唯一的非 NA 元素,则按组折叠字符变量元素

    假设我有以下 data framedf患者家乡和一项任意临床指标 心率 id lt c rep 1 3 each 2 rep 4 3 pt hometown lt c Atlanta NA NA San Diego NA NA San Fr
  • 使用 AWS Glue 或 PySpark 过滤 DynamicFrame

    我的 AWS Glue 数据目录中有一个名为 mytable 的表 该表位于本地 Oracle 数据库连接 mydb 中 我想将生成的 DynamicFrame 过滤为仅 X DATETIME INSERT 列 时间戳 大于特定时间 在本例
  • 在 Spring Data REST+HATEOAS 中删除 REST 关联

    我想知道如何通过 REST 调用删除多对多关联 我能够创建记录并将它们关联起来 但不知道如何删除 我有一个 Spring Boot 项目 其中使用 REST 和 HATEOAS 来绕过服务和控制器并直接公开我的存储库 我有一个用户模型 域类
  • 简单的 Haskell 循环

    我刚刚开始学习 Haskell 但现在缺少循环令人无限沮丧 我弄清楚了如何为函数编写循环 然而 我的问题是我想在迭代循环时输出一些结果 看来我必须使用调试来执行这个简单的任务 所以现在我只想看一个如何在主结构中打印 10 次字符串的示例 换
  • 使用VBA代码将表格从Excel复制到Word书签

    我实际上需要你帮助修改这个宏代码 我从其他地方得到了这个代码 抱歉 忘记了他的名字 基本上 我有来自 Excel Sheet1 的表数据源 我需要将该表传输到 MS Word 同时保留边框 字体大小 自动调整等格式 并使用名为 书签 的书签
  • ASP.NET 类库未遇到断点

    我有一个使用 vs2008 的 ASP NET Web 应用程序 它曾经让我达到断点 但由于本网站中的某些未知原因 它不再让我达到断点 我已经将所有内容设置为调试和重新构建大约一百万次以及其他所有内容 但似乎无法达到该死的断点 断点适用于该
  • #include 运行 pip install zbar 时生成 1 个错误

    我正在尝试奔跑pip install zbar由于某种原因 我似乎无法找到解决此依赖性问题的答案 任何帮助将不胜感激 请参阅下面的回溯 Downloading unpacking zbar Downloading zbar 0 10 tar
  • UIWebView:如何在 HTML 文本字段中插入文本

    I ve an UIWeb视图加载移动网络表单 URL 的位置 在我的应用程序的方法中 我想将一些文本插入具有焦点的 UIWebView 中的 HTML 文本字段中 我怎样才能做到这一点 有没有办法获取具有焦点的 HTML 元素的 ID 然
  • Python:基于参数的单例

    我正在关注这个link https stackoverflow com a 6798042 820410并尝试创建一个单例类 但是 考虑参数 在启动类时传递 以便在参数相同时返回相同的对象 因此 不要将类名 类引用存储为dictkey 我想
  • UWP 应用程序安装无需管理员权限、powershell 交互且无需 Windows 应用商店?

    这里有 windows uwp 专家 吗 我已经研究下面提到的主题一天了 因为我不敢相信我们无法分发我们的 UWP 应用程序 是不是真的不可能通过以下方式分发 UWP 应用程序与商店不同的渠道无需手动运行 与powershell脚本交互 因
  • .htaccess:如何删除 URL 中的子文件夹子文件夹?

    我正在尝试重定向此网址www domain com username to www domain com username public但删除 public从网址 这是我的 htaccess file
  • 如何将 singledispatchmethod 与继承类一起使用

    在我的代码中 我有以下课程 class A functools singledispatchmethod def handle arg pass 我想要其他类继承A并重载泛型方法handle像这样 class B A handle regi