pythonnamedtuple定义类型_python-自定义type.NamedTuple
我正在使用NamedTuples来保存数据,并且我想添加一个可由多个基于NamedTuple的类继承的方法.但是,当我尝试使用多重继承或基于NamedTuple的类的子类化时,它不起作用.具体来说,我试图为所有数据类自动提供一种方法,该方法可以查看类注释,然后基于此方法调用一些序列化代码.以下是我尝试过的一些示例:
from typing import NamedTuple
class Base1:
def foo(self):
print(self.__annotations__)
class Test1(NamedTuple, Base1):
x: int
y: int
x = Test1(1, 2)
x.foo() # raises AttributeError
class Base2(NamedTuple):
def foo(self):
print(self.__annotations__)
class Test2(Base2):
x: int
y: int
x = Test2(1, 2) # TypeError: __new__() takes 1 positional argument but 3 were given
有没有办法让我像这样使用NamedTuple类?
解决方法:
有争议的是通过键入.NamedTuple使用的元类;此元类将忽略所有基类,仅生成具有添加的注释信息(跨直接在该类上定义的所有其他属性进行复制)的collections.namedtuple()类.
您可以定义自己的元类(必须是type.NamedTupleMeta的子类),在生成命名的元组类后添加其他基类:
import typing
class MultipleInheritanceNamedTupleMeta(typing.NamedTupleMeta):
def __new__(mcls, typename, bases, ns):
if typing.NamedTuple in bases:
base = super().__new__(mcls, '_base_' + typename, bases, ns)
bases = (base, *(b for b in bases if not isinstance(b, typing.NamedTuple)))
return super(typing.NamedTupleMeta, mcls).__new__(mcls, typename, bases, ns)
class Base1(metaclass=MultipleInheritanceNamedTupleMeta):
def foo(self):
print(self.__annotations__)
class Test1(NamedTuple, Base1):
x: int
y: int
请注意,这不会让您继承字段!这是因为您必须为字段的任何组合生成一个新的namedtuple类.上面产生了以下结构:
> Test1,继承自
> _base_Test1-实际的键入.NamedTuple生成namedtuple
>元组
> Base1
并按要求工作:
>>> x = Test1(1, 2)
>>> x.foo()
{'x': , 'y': }
标签:python-3-x,mypy,python
来源: https://codeday.me/bug/20191109/2010989.html
pythonnamedtuple定义类型_python-自定义type.NamedTuple相关推荐
- pythonnamedtuple定义类型_python - namedtuple和可选关键字参数的默认值
python - namedtuple和可选关键字参数的默认值 我正在尝试将一个冗长的空洞"数据"类转换为一个命名元组. 我的班级目前看起来像这样: class Node(obje ...
- pythonnamedtuple定义类型_python namedtuple的使用
首先,我会介绍下使用namedtuple所需要了解的基本概念,然后讲解如何使用namedtuple,最后使用namedtuple来创建一摞纸牌.理解这些之后,就可以权衡利弊,并在生产中使用 基本概念 ...
- pythonnamedtuple定义类型_详解Python中namedtuple的使用
namedtuple是Python中存储数据类型,比较常见的数据类型还有有list和tuple数据类型.相比于list,tuple中的元素不可修改,在映射中可以当键使用. namedtuple: na ...
- python定义词典_python – 自定义类是一个字典,但初始化没有字典副本?
出于易读性的目的,我希望有一个自定义类,其行为与dict完全相同(但是带有有意义的类型,而不是更通用的dict类型): class Derivatives(dict): "Dictionar ...
- python中object是什么类型_Python 的 type 和 object 之间是怎么一种关系?
class,metaclass,instance,subclass,base 以下成立: 对任意的A,A是instance(推论:任意class也是instance) 对任意A,存在B,使得B是A的c ...
- 在python中使用关键字define定义函数_python自定义函数def的应用详解
这里是三岁,来和大家唠唠自定义函数,这一个神奇的东西,带大家白话玩转自定义函数 自定义函数,编程里面的精髓! def 自定义函数的必要函数:def 使用方法:def 函数名(参数1,参数2,参数-): ...
- python中函数type可以测试对象类型_Python中type函数type()显示对象的类型,dir函数dir()显示的是对象可用的方法。_学小易找答案...
[判断题]new_word = word.upper() 这一语句表示将word这个变量的值全部小写并赋给新变量new_word. [单选题]All of the students have fini ...
- python中函数type可以测试对象类型_python类型检测最终指南--Typing模块的使用
正文共:30429 字 预计阅读时间:76分钟 原文链接:https://realpython.com/python-type-checking/ 作者:Geir Arne Hjelle 译者:陈祥安 ...
- oracle自定义的记录类型,oracle 自定义类型 type / create type
一:Oracle中的类型有很多种,主要可以分为以下几类: 1.字符串类型.如:char.nchar.varchar2.nvarchar2. 2.数值类型.如:int.number(p,s).integ ...
最新文章
- 中科院自动化所介绍深度强化学习进展:从AlphaGo到AlphaGo Zero
- (转)ZXing生成二维码和带logo的二维码,模仿微信生成二维码效果
- POJ1087DFS+匈牙利或者DINIC
- yunyang1994 tensorflow_yolov3 ./checkpoint/yolo3_coco_demo.ckpt does not exist !!! Now it starts to
- C语言 数组遍历 - C语言零基础入门教程
- js 延迟几秒执行ifarme_Node.js调试之llnode篇
- 数据文件坏删除数据文件
- oracle asm 错误集
- 锻炼编程思维的小题目
- 计算机辅助翻译软件差异,两款计算机辅助翻译软件的比较
- 在苹果笔记本如何使用python_苹果电脑系统如何运行python工具介绍
- 卡方线性趋势检验_趋势性卡方检验专题讨论
- pip安装的依赖不在虚拟环境中
- go之官方依赖管理工具dep安装和使用
- FPGA——1位全加器和4位全加器的实现
- Python爬虫js处理
- 基于深度学习的几何模型表示 分析与合成
- 小迪迪QQ机器人框架+源码
- 迅捷CAD编辑器是不错的PDF转换CAD软件
- html右移动动画效果,图片的左右移动,js动画效果实现代码
热门文章
- java MySQL mq_蚂蚁社招Java岗面试分享(MySQL+RabbitMQ+Spring Boot)
- excel appliacation 不能分配角色_用了5年Excel,换了这个神奇的报表工具,不禁感叹:国产真香...
- Qt的qrc资源文件在Visual studio编译出的Qt程序中不能显示问题解决
- Android自定义控件之自定义时钟
- java怎么获取ajax_Java学习路线
- (笔记)java环境变量设置
- 《SAP HANA平台应用开发》—第2章2.3节熟悉SAP HANA工作台
- CodeForces 525C Ilya and Sticks 贪心
- 系统的crontab设定:/etc/crontab
- 巧用PowerShell维护Win2008服务器作业