반응형
데이터 클래스에 기본 목록 인수 전달
저는 우리 반에서 기본 인수를 통과하고 싶지만, 왠지 문제가 있습니다.
from dataclasses import dataclass, field
from typing import List
@dataclass
class Pizza():
ingredients: List = field(default_factory=['dow', 'tomatoes'])
meat: str = field(default='chicken')
def __repr__(self):
return 'preparing_following_pizza {} {}'.format(self.ingredients, self.meat)
지금 인스턴스화를 시도하면Pizza
다음 오류가 발생합니다.
>>> my_order = Pizza()
Traceback (most recent call last):
File "pizza.py", line 13, in <module>
Pizza()
File "<string>", line 2, in __init__
TypeError: 'list' object is not callable
내가 뭘 잘못하고 있는 거지?
문서에서:
대상 매개 변수
field()
다음과 같습니다.
- default_factory: 제공된 경우 이 필드에 기본값이 필요할 때 호출될 0-인수 호출 가능이어야 합니다.다른 목적 중에서도 아래에서 설명하는 것처럼 기본값이 가변적인 필드를 지정하는 데 사용할 수 있습니다.default와 default_factory를 모두 지정하는 것은 오류입니다.
당신의.default_factory
는 0자리 호출 가능이 아니라 목록이며, 이는 오류의 원인입니다.
from dataclasses import dataclass, field
from typing import List
@dataclass
class Pizza():
ingredients: List = field(default_factory=['dow', 'tomatoes']) # <- wrong!
대신 람다 함수를 사용합니다.
@dataclass
class Pizza():
ingredients: List = field(default_factory=lambda: ['dow', 'tomatoes'])
복잡한 데이터 유형의 경우 다음과 같이 축약합니다.
import copy
from dataclasses import dataclass, field
from typing import Dict, Tuple
def default_field(obj):
return field(default_factory=lambda: copy.copy(obj))
@dataclass
class C:
complex_attribute: Dict[str, Tuple[int, str]] = default_field({"a": (1, "x"), "b": (1, "y")})
언급URL : https://stackoverflow.com/questions/52063759/passing-default-list-argument-to-dataclasses
반응형
'source' 카테고리의 다른 글
뷰 모델에서 창 닫기 (0) | 2023.05.11 |
---|---|
텍스트가 잘리거나 하나 이상의 문자가 대상 코드 페이지에 일치하지 않음 Excel 파일에서 가져올 때 (0) | 2023.05.11 |
내부에 다른 디렉터리를 만드는 대신 'cp'가 디렉터리를 덮어쓰도록 강제하는 방법은 무엇입니까? (0) | 2023.05.11 |
노드 설치 방법.Amazon Linux의 JS (0) | 2023.05.11 |
VBA의 다른 특정 워크북에서 기능을 호출하는 방법은 무엇입니까? (0) | 2023.05.11 |