graphql-python / graphql-python/graphene

Why SubclassWithMeta.__init_subclass__ terminates the super() chain?

Ouverte
#1,233 0 commentaires 1 réaction 0 personnes assignées Voir sur GitHub
✨ enhancement
Langage dominant
Python
Étoiles
8.2k
Forks
818
Métriques de merge des PR
Aucune PR mergée en 30 j

Description

Is there a great reason why `graphene.utils.subclass_with_meta.SubclassWithMeta.__init_subclass__`, doesn't call `super().__init_subclass__()`?
https://github.com/graphql-python/graphene/blob/master/graphene/utils/subclass_with_meta.py#L21-#L46

The issue with this is IMO the following:

- Class `Foo` has defined a custom `__init_subclass__`.
- Class `Bar` derives from `Foo` and e.g. `graphene.types.ObjectType`.

Now if `Foo` is accidentally placed after `ObjectType` in `Bar`'s inheritance list, `Foo.__init_subclass__` will never be run.

Here's a quick demo:

```
from graphene.types import ObjectType

class Foo:
def __init_subclass__(cls):
print(f"Init Foo's subclass: {cls.__name__}")
super().__init_subclass__()

class Bar1(Foo, ObjectType):
pass

class Bar2(ObjectType, Foo):
pass
```

>Output:
>```
>Init Foo's subclass: Bar1
>```

[My proposed fix PR](https://github.com/graphql-python/graphene/pull/1234) would simply add `super().__init_subclass__()` to the last line of `SubclassWithMeta.__init_subclass__`.

Guide de contribution

Aucun guide de contribution indexé pour ce dépôt

Piste de recherche

Commencez par graphene/utils/subclass_with_meta.py aux lignes 21-46 et reproduisez l’exemple Foo, Bar1 et Bar2 de l’issue. Examinez le correctif proposé dans graphene/pull/1234 et vérifiez que SubclassWithMeta.__init_subclass__ n’interrompt plus la chaîne coopérative de super(). C’est terminé lorsque Foo.__init_subclass__ s’exécute pour les deux ordres d’héritage sans modifier le comportement existant.

Rédigé par le modèle d'indexation à partir du texte de l'issue.

Évaluation

Stack technique
python
Domaine
backend
Type d'issue
Bug
Difficulté
2/5
Temps estimé
1-3 heures
Activité
À l'abandon
Clarté
Clairement spécifiée
Accessibilité débutants
25/100

Recevez les nouvelles issues par e-mail

Un résumé court des issues GitHub adaptées aux débutants.