Initialization order of fields overridden in subclasses
Nadie ha tomado este issue todavía.
Evaluación
- Dificultad
- 5/5
- Tiempo estimado
- Más de una semana
- Aptitud para principiantes
- 25/100
Línea de trabajo
Start by reproducing the provided attrs example and reading the subclassing discussion in related issue #637, alongside the referenced dataclasses inheritance behavior in PEP 557. The issue does not name implementation files or tests; completion would require maintainer agreement on the intended initialization semantics and a verified resolution for the failing BetterXContainer case.
Escrito por el modelo de indexación a partir del texto del issue.
Descripción
I have a code similar to the following, that relies very heavily on mypy for correctness:
import attr
class X:
""" Some other class from the code """
class XButBetter(X):
""" Some other class from the code """
@attr.s(auto_attribs=True)
class XContainer:
the_x: X
x_metadata: int = attr.ib(init=False)
@x_metadata.default
def _x_metadata_default(self) -> int:
return self.the_x.get_metadata()
def some_useful_function(self) -> str:
""" A useful but very complex function dealing with self.the_x """
@attr.s(auto_attribs=True)
class BetterXContainer(XContainer):
the_x: XButBetter
def some_function(self) -> None:
""" some code assuming the_x is the better version """
xc = XContainer(X())
xcb = BetterXContainer(XButBetter())
The last line fails with AttributeError: 'BetterXContainer' object has no attribute 'the_x', because the initialization order of the attributes changed in the subclass. Another similar issue is described on stackoverflow.
Any plans on implementing subclassing similarly to dataclasses? Would that be a breaking API change? (Probably.)
Related attrs issue I found: #637
PS.: I realize this is subclassing issue n+1 when subclassing is frowned upon, and this is somewhat similar to the classic OOP problem of subclassing Circle from Ellipse, so feel free to just say "damn man, this is not proper OOP, so wontfix".
- Lenguaje dominante
- Python
- Estrellas
- 5.8k
- Forks
- 480
- Merge medio
- 2 h 15 min
- PR fusionados (30 d)
- 2
Guía de contribución
Primeros pasos
- Lee el issue completo y luego la guía de contribución del proyecto.
- Comenta en el issue que vas a ocuparte — evita que dos personas hagan lo mismo.
- Haz un fork del repositorio y trabaja en una rama.
- Abre un pull request que haga referencia al número del issue.
Más de python-attrs/attrs
-
Dificultad 5/5 Más de una semana Aptitud para principiantes 20/100
python-attrs/attrs#1620 ·
-
Dificultad 3/5 1-2 días Aptitud para principiantes 55/100
python-attrs/attrs#1596 · 2 comentarios · 1 reacción ·
-
Dificultad 4/5 3-5 días Aptitud para principiantes 35/100
python-attrs/attrs#1549 · 3 comentarios ·
-
Dificultad 4/5 3-5 días Aptitud para principiantes 38/100
python-attrs/attrs#1543 · 2 comentarios ·
-
Dificultad 4/5 3-5 días Aptitud para principiantes 35/100
python-attrs/attrs#1532 ·
Todos los issues de python-attrs/attrs
Issues similares
-
agent-ready documentation needs-triage
Dificultad 1/5 1-3 horas Aptitud para principiantes 88/100
-
documentation
Dificultad 1/5 Menos de una hora Aptitud para principiantes 91/100
-
workflow-status page template still says reusable workflows are "triggered only by workflow_call:" Abierto
Dificultad 1/5 Menos de una hora Aptitud para principiantes 92/100
-
Add https://search.jeremyh.xyz/ Abiertoinstance instance add
Dificultad 1/5 Menos de una hora Aptitud para principiantes 72/100
searxng/searx-instances#939 · 1 comentario ·
-
area-deployment area-integrations triage:bot-seen
Dificultad 2/5 Medio día Aptitud para principiantes 86/100