问题标签 [python-dataclasses]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
python-3.x - 初始化属性上的函数
我需要在初始化属性之前调用一个函数,最好使用python3.7数据类,也可以命名为元组。
这段代码做了类似的事情,属性名称只输入了一次,但是非常混乱,我不知道如何支持默认值。我确信有一种更好、更 Pythonic 的方式来做到这一点。
python - 改变数据类时验证输入
在 Python 3.7 中有这些新的“数据类”容器,它们基本上类似于可变的命名元组。假设我创建了一个代表一个人的数据类。我可以通过这样的__post_init__()
函数添加输入验证:
这将使良好的输入通过:
虽然所有这些错误的输入都会引发错误:
但是,由于数据类是可变的,我可以这样做:
从而绕过输入验证。
那么,在初始化之后,确保数据类的字段不会突变为坏东西的最佳方法是什么?
python - Python Dataclass 给了我“函数”对象没有属性“__mro__”?
如上一个问题所示:TypeError: 'int' object is not iterable while no iteration exists? ,我发现我的程序有问题。那就是:在Python中,
set( (0,0) )
其实给你{0}
,但我想要{(0,0)}
collections.deque( ((0, 0), [ (0, 0) ] ) ).popleft()
实际上给了你(0,0)
,而我想要((0, 0), [ (0, 0) ] )
所以现在我正在考虑设计自己的数据类。然而在测试代码中,我遇到了一个“函数”对象没有属性“ mro ”的问题。
测试代码1:
测试代码1错误截图:
测试代码 2:
我的 Python 版本是 Anaconda 3.6.8
python - 非特定数据类实例的类型提示
我有一个接受 any 实例的函数dataclass
。什么是合适的类型提示?
在 python 文档中没有找到正式的东西
这是我一直在做的,但我不认为这是正确的
另一个想法是使用Protocol
带有这些类属性的 a __dataclass_fields__
,__dataclass_params__
.
python - 如何忽略传递给数据类的额外参数?
我想创建一个config
dataclass
以简化对特定环境变量的白名单和访问(打字os.environ['VAR_NAME']
相对于 而言是乏味的config.VAR_NAME
)。因此,我需要忽略我dataclass
的__init__
函数中未使用的环境变量,但我不知道如何提取默认值__init__
以便用例如也包含*_
作为参数之一的函数来包装它。
运行这个给了我TypeError: __init__() got an unexpected keyword argument 'SOME_DEFAULT_ENV_VAR'
。
python - Python:从基础Dataclass继承的Dataclass,如何将值从基础升级到新类?
如何将值从基础数据类升级到继承自它的值?
示例(Python 3.7.2)
打印“嗨亚历克斯”
返回随机陌生人“人(名称='鲍勃',气味='OK')”
如何将 random_stranger 变成朋友?
返回“朋友(姓名=人(姓名='鲍勃',气味='OK'),气味='好')”
结果我想得到“朋友(名字='鲍勃',气味='OK')”。
有效,但是如何避免复制所有字段?
还是我不能在从数据类继承的类上使用 @dataclass 装饰器?
python - 在 python 数据类 __init__ 方法中强制类型转换
我有以下非常简单的数据类:
我创建了一个类的实例,但我使用了一个字符串而不是一个整数:
我真正想要的是强制转换为我在类定义中定义的数据类型:
我必须__init__
手动编写该方法还是有一种简单的方法来实现这一点?
python - Python数据类继承类时控制初始化顺序
我所知道
的 Python 数据类允许继承,无论是使用数据类还是类。在最佳实践中(以及在其他语言中),当我们进行继承时,应该首先调用初始化。在 Python 中是:
我在做什么
由于数据类是在 Python 3.7 中引入的,我正在考虑用数据类替换我的所有类。使用数据类,它的好处之一就是__init__
为您生成。当数据类需要继承基类时,这并不好——例如:
我
的问题问题是我们必须把超级初始化调用放在里面__post_init__
,实际上是在数据类的init之后调用的。
缺点是我们失去了约定契约,初始化混乱导致我们不能覆盖超类的属性。
可以通过 的概念来解决__pre_init__
。我已经阅读了该文件,并没有看到与该概念有任何关系。我错过了什么吗?
python - 带有**kwargs(星号)的python3数据类
目前我像这样使用 DTO(数据传输对象)。
示例代码很小,但是当对象规模变大时,我必须定义每个变量。
在深入研究时,发现支持python 3.7dataclass
下面的代码是 DTO 使用的数据类。
在这种情况下,我怎样才能允许传递更多未定义的参数class Test2
?
如果我用过Test1
,很容易。只需添加**kwargs(asterisk)
到__init__
但是使用数据类,找不到任何方法来实现它。
这里有什么解决办法吗?
谢谢。
编辑
结果 :{'user_id': 'hide', 'body': 'body test'}
如您所知,我想插入字典类型的数据->**temp
在数据类中使用星号的原因是相同的。
我必须将字典类型传递给类 init。
这里有什么想法吗?