dataclass overriding a property in the parent class is broken
Aberta
@sobolevn já está trabalhando nisso.
Desde 4/7/2024.
stdlib
topic-dataclasses
type-bug
- Linguagem predominante
- Python
- Estrelas
- 77.2k
- Forks
- 35.9k
- Métricas de merge de PRs
- Métricas de PR pendentes
Descrição
Bug report
Bug description:
Consider the following snippet
@dc.dataclass
class A:
a: int
@property
def b(self) -> int:
return 1
@dc.dataclass
class B(A):
b: int = dc.field(default_factory=lambda: 0)
Dataclass apparently doesn't create a class attribute, so class B ends up with property , 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 of b like so b: int = dc.field(default=0), or with b: int = 0 then everything works as expected:
>>> B.b
0
>>> 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
Guia de contribuição
Primeiros passos
- Leia a issue inteira e depois o guia de contribuição do projeto.
- Comente na issue dizendo que vai assumir — evita que duas pessoas façam o mesmo trabalho.
- Faça um fork do repositório e trabalhe em uma branch.
- Abra um pull request que referencie o número da issue.
Avaliação
Esta issue ainda não foi avaliada.