初始化Python数据类对象而不传递实例变量或默认值

发布于 2025-01-12 11:21:16 字数 579 浏览 1 评论 0原文

我想初始化 python 数据类对象,即使没有实例变量传递给它,并且我们没有向参数添加默认值

@dataclass
class TestClass:
   
   paramA: str
   paramB: float
   paramC: str

obj1 = TestClass(paramA="something", paramB=12.3)

。它会抛出

TypeError: __init__() missing 1 required positional argument: 'paramC'

我可以使用默认值来解决此错误。

paramC: str = None
# OR
paramC: str = ""

但我不想使用 paramC 的默认值,因为我想要一个场景,如果我们传递 paramC 那么只有它应该存在于对象中,否则它不应该存在。因此,如果我们在这里使用默认值,paramC 将始终存在于对象中,其值为 None 或空字符串。

如果在初始化期间未传递参数,我想跳过参数的初始化。

I want to initialize python dataclass object even if no instance variables are passed into it and we have not added default values to the param

@dataclass
class TestClass:
   
   paramA: str
   paramB: float
   paramC: str

obj1 = TestClass(paramA="something", paramB=12.3)

Here it won't allow me to create the object & it will throw

TypeError: __init__() missing 1 required positional argument: 'paramC'

I can use the default value to resolve this error.

paramC: str = None
# OR
paramC: str = ""

But I don't want to use a default value for paramC because I want a scenario such that if we pass paramC then only it should be there in the object else it should not be there. So if we use default value here paramC will always be there in the object with value None OR empty string.

I would like to skip initialization of a param if it is not passed during initialization.

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

时光是把杀猪刀 2025-01-19 11:21:16

我想你可能想要像这个答案这样的东西,

它使用make_dataclass 动态创建对象

I think you may want something like this answer

Which uses make_dataclass to create an object on the fly

淡看悲欢离合 2025-01-19 11:21:16

您可以使用可选类型。

from typing import Optional

@dataclass
class TestClass:
   
   paramA: str
   paramB: float
   paramC: Optional[str] = None

obj1 = TestClass(paramA="something", paramB=12.3)

You can use Optional typing.

from typing import Optional

@dataclass
class TestClass:
   
   paramA: str
   paramB: float
   paramC: Optional[str] = None

obj1 = TestClass(paramA="something", paramB=12.3)
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文