Closed
Description
In Python 3.7.0 and mypy 0.630+dev-3fb16a2b8c5439074e39b75feebc109a439eede3
, if I save the following code to mypy-test.py
from dataclasses import dataclass
dataclass_alias = dataclass
dataclass_alias2 = dataclass(order=False)
def dataclass_wrapper(cls):
return dataclass(cls)
@dataclass
class A: arg1: int
@dataclass_alias
class B: arg1: int
@dataclass_alias2
class C: arg1: int
@dataclass_wrapper
class D: arg1: int
a = A(arg1=1)
b = B(arg1=1)
c = C(arg1=1)
d = D(arg1=1)
I get the following mypy output
$ mypy mypy-test.py
mypy-test.py:22: error: Unexpected keyword argument "arg1" for "B"
mypy-test.py:23: error: Unexpected keyword argument "arg1" for "C"
mypy-test.py:24: error: Unexpected keyword argument "arg1" for "D"
Notice that mypy has no trouble recognizing the signature of A
's constructor. I can understand how mypy would have a hard time with dataclass_wrapper
, and dataclass_alias
is probably not critical in terms of use case. However, dataclass_alias2
is important if you want (as I do) to define many data classes with the same options, especially if you want to make these options available as part of your module's public interface.