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 ...
最新文章
- Hacker(十)----常用入侵工具
- linux下VNC配置详解
- linux中redis的主从
- 你的工作经验到底值钱吗?
- 【无人机】物流行业迈入“无人”时代!全自动智能无人机投入运营,成本直降80%!...
- 150行java代码分析100篇英语六级阅读理解单词频率
- 【CodeForces】700 D. Huffman Coding on Segment 哈夫曼树+莫队+分块
- Linux操作Oracle(16)——Oracle扩容报错:ORA-01144_表空间数据文件超出最大限制
- flutter offset_用Flutter实现58App的首页
- redis系列二: linux下安装redis
- 用手机打开word图表位置很乱_居然很多人不知?这里可以免费下载Excel可视化图表,不要错过了...
- 暖心!阿里安全白帽挖漏洞做公益 连收2462封山区小孩感谢信
- 微信小程序常用图标大全1
- pandas库的使用
- Namesilo更换域名DNS解析服务器的方法
- 什么是Saas,以及什么是PLG下的Saas
- Domino V12 Beta新玩法
- 完全不懂编程的人初学需要准备什么?这些就够了
- 个人网站备案的全流程关于阿里云
- VUE2 组件间传值
热门文章
- nacos 公共_Nacos数据模型
- quill鼠标悬浮 出现提示_外设报道——DELUX多彩M618X垂直鼠标颠覆创新
- matlab 高斯迭代代码_用Matlab编写你的第一个有限元_《数值计算与程序设计》系列课程...
- jenkins pipeline python_Jenkins Pipeline示例
- JDBC连接MySQL数据库及示例
- 4月11日 GCD 总结(一)
- Spring_Bean的作用域---和使用外部属性文件
- 2018年一线互联网公司Java高级面试题总结
- trigger 触发器(mysql)
- 在主界面的右下端设置系统时间