是否可以在数据类中使用 *args?
Is it possible to use *args in a dataclass?
我最近开始使用 dataclasses,它们将是对 3.7 的一个很好的补充。我很好奇是否或如何使用 dataclasses.
重新创建此 class 的相同功能
class Nav(object):
def __init__(self, name:str, menu, page, *submenus):
self.name = name
self.menu = menu
self.page = page
self.submenus = submenus
foo = Nav("name", "menu", "page")
这行不通。引发异常 TypeError: __init__() missing 1 required positional argument: 'submenus'
@dataclass
class Nav(object):
name:str
menu: Any
page: Any
submenus: tuple
foo = Nav("name", "menu", "page")
我认为这是因为 class 没有执行参数解包的说明。 有什么方法可以指示 dataclass 装饰器子菜单需要解包吗?
我在 PEP 中看到了一个如何覆盖 __init__
的示例。
Sometimes the generated init method does not suffice. For example,
suppose you wanted to have an object to store *args and **kwargs:
@dataclass(init=False)
class ArgHolder:
args: List[Any]
kwargs: Mapping[Any, Any]
def __init__(self, *args, **kwargs):
self.args = args
self.kwargs = kwargs
a = ArgHolder(1, 2, three=3)
我最近开始使用 dataclasses,它们将是对 3.7 的一个很好的补充。我很好奇是否或如何使用 dataclasses.
重新创建此 class 的相同功能class Nav(object):
def __init__(self, name:str, menu, page, *submenus):
self.name = name
self.menu = menu
self.page = page
self.submenus = submenus
foo = Nav("name", "menu", "page")
这行不通。引发异常 TypeError: __init__() missing 1 required positional argument: 'submenus'
@dataclass
class Nav(object):
name:str
menu: Any
page: Any
submenus: tuple
foo = Nav("name", "menu", "page")
我认为这是因为 class 没有执行参数解包的说明。 有什么方法可以指示 dataclass 装饰器子菜单需要解包吗?
我在 PEP 中看到了一个如何覆盖 __init__
的示例。
Sometimes the generated init method does not suffice. For example, suppose you wanted to have an object to store *args and **kwargs:
@dataclass(init=False) class ArgHolder: args: List[Any] kwargs: Mapping[Any, Any] def __init__(self, *args, **kwargs): self.args = args self.kwargs = kwargs a = ArgHolder(1, 2, three=3)