我有一个问题,重新分级嵌套的数据对象。
正如其他文章()中所建议的那样,我们可以使用dacite包创建嵌套的数据对象。这适用于处理我们嵌套的字典结构中的数据。
from dataclasses import dataclass
from dacite import from_dict
@dataclass
class A:
x: str
y: int
@dataclass
class B:
a: A
data = {
'a': {
'x': 'test',
'y'
我找到了关于使用的父母的__post_init__方法的具体调用的super() where this会话,但是如果我尝试这样做:
from dataclasses import dataclass
@dataclass
class A:
def __post_init__(self):
print("A")
@dataclass
class B(A):
pass
b = B()
它将输出:
A
因此,父母的方法不需要明确的调用就能工作。
我不明白在这个问题上谈论的是什么,还是继承问题得到了解决?
在这种情况下,datacla
我试图从包含笛卡尔坐标x,y& z的3个列表中计算出一个类似半径的数量。下面是我的最小代码示例,以再现我所面临的问题;子类计算半径-数量,但返回一个零值。原因是什么,如何解决呢?
剧本:
# -*- coding: utf-8 -*-
from dataclasses import dataclass, field
from typing import List
@dataclass
class LoadHalo:
x: List = field(default_factory=list)
y: List = field(default_factory=list)
可以在python中迭代dataclass实例的属性吗?例如,我希望在__post_init__中将整数属性加倍:
from dataclasses import dataclass, fields
@dataclass
class Foo:
a: int
b: int
def __post_init__(self):
self.double_attributes()
def double_attributes(self):
for field in fields(Foo):
field = field
目前,我有一些类似于此的代码,删除了不相关的方法。
import math
import numpy as np
from decimal import Decimal
from dataclasses import dataclass, field
from typing import Optional, List
@dataclass
class A:
S0: int
K: int
r: float = 0.05
T: int = 1
N: int = 2
StockTrees: List[float] = field(init=False
如果我理解得很好,ClassVar是一种在数据类上创建类变量的方法,该变量不会被视为字段。所以,举个例子:
@dataclass
class MyData:
name: str
age: int
parent: ClassVar[Optional["MyData"]] = None
jake_data = MyData(name="Jake", age=34)
dataclasses.fields(jake_data) # This will output only two fields, as status is a ClassVa
我有一个数据集,我想在初始化类时设置一个值。
@dataclass
class classA:
__data: DataFrame
__Limit: float
__totalLimit: float = field(init=False)
def __post_init__(self):
# This Does not work
__setTotalLimit()
# This works when i put the logic in.
# self.__totalLimit = se
我有一个根级config类,我通过依赖注入在我的代码库中传递它。
问题是,我有一个数据类,它需要这个配置中的一些属性来计算__post_init__()中的值world_coords。
为了保持我的测试干净,并避免其他测试导入问题(这里不讨论),我希望能够将配置直接传递给这个对象,而不是从导入中读取这些值。但是,如果我将配置结构化为参数,它将成为数据类的一个属性,这是我试图避免的。一旦使用了配置,RoadSegmentNode实际上并不需要保留配置的引用。
下面是这个类的基本结构:
@dataclass(eq=True, frozen=True) # make hashable
class
我有一个带有可变字段(列表)的数据类。我希望实现的是这个字段永远不会为None,即使在__init__调用中显式设置为None。在一个普通的类中,这是很容易实现的: class A:
def __init__(self, l: Optional[List[int]] = None):
if l is None:
l = []
self.l = l 有没有办法只用dataclasses.field函数就能达到同样的效果,也就是不显式地实现__init__方法(当类有很多属性时,这会很麻烦)?当提供的初始化参数为None时,我可以强
我使用field(init= False)来禁用初始化self.ref。然后它就是post中的一个值。下面的代码引发AttributeError: 'Data' object has no attribute 'ref' from dataclasses import dataclass, field
def make_list(): return [[0] for k in range(9)]
@dataclass
class Data:
rows: list
cols: list
blocks: list
ref: dict
我有一个dataclass DummyClass,它的属性dummy只能接受两个值:"foo"和"bar"。我希望对此属性使用Enum类,以便在使用无效值时引发错误:
from dataclasses import dataclass, field
from enum import Enum
class DummyAttribute(Enum):
FOO = "foo"
BAR = "bar"
@dataclass
class DummyClass:
dummy: DummyAttribute
问题是,
我有一个python dataclass,它看起来像:
@dataclass
class MyDataClass:
field0: int = 0
field1: int = 0
# --- Some other attribute that shouldn't be considered as _fields_ of the class
attr0: int = 0
attr1: int = 0
我想用这样的方式编写类,在调用dataclasses.fields(my_data:=MyDataClass())时,只报告field0和field
即使一个类是从ABC继承的,它仍然可以被实例化,除非它包含抽象方法。
有了下面的代码,防止创建Identifier对象的最佳方法是什么:Identifier(['get', 'Name'])
from abc import ABC
from typing import List
from dataclasses import dataclass
@dataclass
class Identifier(ABC):
sub_tokens: List[str]
@staticmethod
def from_sub_tokens(sub_to
假设我创建了一个@dataclass class Foo,并添加了一个__post_init__来执行类型检查和处理。
当我尝试yaml.load一个!Foo对象时,__post_init__没有被调用。
from dataclasses import dataclass, fields
from ruamel.yaml import yaml_object, YAML
yaml = YAML()
@yaml_object(yaml)
@dataclass
class Foo:
foo: int
bar: int
def __post_init__(self
from collections import namedtuple
Data=namedtuple('Data','name number age cgpa')#best to keep all data types as string
def prettyprint(X,end="\n"):
s="{0},{1},{2},{3}".format(X.name,X.number,X.age,X.cgpa)
print(s,end=end)
file_name=r"""C:\Users\DE
我希望我的数据集有一个可以手动提供的字段,如果不是,则在初始化时从其他字段推断。MWE:
from collections.abc import Sized
from dataclasses import dataclass
from typing import Optional
@dataclass
class Foo:
data: Sized
index: Optional[list[int]] = None
def __post_init__(self):
if self.index is None:
self.ind
我想知道是否可以在post_init()中“冻结”数据集对象,甚至在定义对象之后也是如此。
因此,与其:
@dataclass(frozen=True)
class ClassName:
var1: type = value
有类似于:
@dataclass
class ClassName:
var1: type = None
def __post_init__(self):
self.var1 = value
FREEZE()
甚至类似的事物:
a = ClassName()
FREEZE(a)
可能还是不可能,为什么?
考虑下面的python代码:
from dataclasses import dataclass
@dataclass
class Registration:
category: str = 'new'
@dataclass
class Car:
make: str = None
category: str = None
reg: Registration = None
def __post_init__(self):
''' fill in any missing fields from the registrati
我正在尝试为我从数据类创建的对象生成一个唯一的ObjectId。对于我从类中创建的每个对象,它都会生成相同的Id。 from dataclasses import dataclass
from bson import ObjectId
@dataclass
class B:
id: ObjectId=ObjectId()
b =B()
b.id
>>ObjectId('600c9d09c889e41a182988b0')
c =B()
c.id
>>ObjectId('600c9d09c889e41a182988b0')
我想要实现这一点,我可以从dataclass A中删除一个子数据集B,其中B将初始化并隐藏字段,使其不受A影响。
@dataclass
class A:
a: str
b: str
@dataclass
class B(A):
c: str
# not working! just showing, what i'd like to achive
def __init__(self):
self.a = f"extended-{c}"
test = B(b="foo", c="bar") # <--
我有一个数据集,我想在评估另一个属性device_group之后动态创建属性device_name。我目前正在使用@property来完成这个任务,如果我用instance.device_group访问它,它就能工作。
@dataclass
class Device:
device_name: str
uplinks: list
@property
def device_group(self) -> str:
# do something here with self.device_name
return device_gr
我希望使用Python中的数据类来创建一个基类和几个派生类。这些类将包含复杂的属性,例如字典。我希望派生类只更改由基类定义的字典的一部分,这可能吗?还是我还是去上普通的老课更好?
代码片段中显示的是当前的情况,这在代码复制方面似乎是浪费的。
在这个例子中,我可以定义一个接受单个参数而不是lambdas的函数,但是在一个真实的例子中,我必须为每个这样的情况定义一个函数,这将是非常麻烦的。
from dataclasses import dataclass, field
@dataclass
class BaseDataClass:
simple_field_one: int = 10
我想要完成一个列表的init,包含默认的dicts,然后包含列表。
我试过的是:
@dataclass
class MyClass:
self.b: int
cache: list = field(default_factory=list)
def __post_init__(self):
self.cache = [defaultdict(list) for _ in range(self.b)]
我很感激你的帮助。谢谢。
假设我有两个不同框架的对象,我无法更改(一个是C实现的,另一个是使用嵌套工厂实例化的):
# framework_a.py
class Foo:
"""
produced by C implementation
"""
...
text = "some dynamic text"
# more methods to work with text
...
def provide_text():
pass
# framework_b.py
例如,当我在Car类中构造__init__()时,我希望检查变量make和current_gas分别为字符串和浮点数还是整数(非负数)。 那么如何为每个变量引发适当的错误呢? 我试过了 class Car:
def __init__(self,make,current_gas):
if type(make) != str:
raise TypeError("Make should be a string")
if not type(current_gas) == float or type(current_gas