gpt4 book ai didi

python - 在数据类中使用类或静态方法作为 default_factory

转载 作者:行者123 更新时间:2023-12-04 13:12:59 24 4
gpt4 key购买 nike

我想使用 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: name 'self' is not defined


我怎样才能克服这个问题?我不想动 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 - 在数据类中使用类或静态方法作为 default_factory,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/63051253/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com