Uh oh!
There was an error while loading.Please reload this page.
- Notifications
You must be signed in to change notification settings - Fork32.2k
Open
Description
Bug report
Bug description:
Consider the following snippet
@dc.dataclassclassA:a:int@propertydefb(self)->int:return1@dc.dataclassclassB(A):b:int=dc.field(default_factory=lambda:0)
Dataclass apparently doesn't create a class attribute, so class B ends up withproperty
,b
of class A, which seems surprising, especially given that there is explicit assignent of field b in class B(A).
So this results in:
>>> B.b<property object at ...>>>> B(a=2)Traceback (most recent call last): File "<stdin>", line 1, in <module> File "<string>", line 4, in __init__ AttributeError: property 'b' of 'B' object has no setter
If i replace definition ofb
like sob: int = dc.field(default=0)
, or withb: int = 0
then everything works as expected:
>>> B.b0>>> B(a=2)B(a=2, b=0)
I think it would be nice if dataclass would always create a class attribute (especially if there is explicit assignment!)
so that overloads work as expected.
CPython versions tested on:
3.11, 3.12
Operating systems tested on:
Linux