python - 在数据类中使用类或静态方法作为 default_factory
问题描述
我想使用该default_factory
方法填充数据类的属性。然而,由于工厂方法只在这个特定类的上下文中有意义,我想将它保留在类中(例如作为静态或类方法)。例如:
from dataclasses import dataclass, field
from typing import List
@dataclass
class Deck:
cards: List[str] = field(default_factory=self.create_cards)
@staticmethod
def create_cards():
return ['King', 'Queen']
但是,我在第 6 行收到此错误(如预期的那样):
NameError:名称“自我”未定义
我该如何克服这个问题?我不想将该create_cards()
方法移出课堂。
解决方案
一种可能的解决方案是将其移至__post_init__(self)
. 例如:
@dataclass
class Deck:
cards: List[str] = field(default_factory=list)
def __post_init__(self):
if not self.cards:
self.cards = self.create_cards()
def create_cards(self):
return ['King', 'Queen']
输出:
d1 = Deck()
print(d1) # prints Deck(cards=['King', 'Queen'])
d2 = Deck(["Captain"])
print(d2) # prints Deck(cards=['Captain'])
推荐阅读
- python - 具有多个输入和多个输出列的 Pandas 应用、滚动、分组
- javascript - 为什么我在javascript中的队列数据结构表现得不应该
- android - Android 如何使用数字创建分页
- tensorflow - 用于 tfjs 的预训练模型策略
- c# - LINQ 为 SQL 提供不同的结果
- android - 无法在 Windows 10 上下载 Android Studio
- go - 使用 go get 从 WSL 2 上的私有 github 存储库中获取依赖项
- mysql - 聚合后Django ORM加入自我
- mongodb - 在 mongodb 上按年分组
- jmeter - 在mac上运行jmeter的问题