graphene
graphene copied to clipboard
Why SubclassWithMeta.__init_subclass__ terminates the super() chain?
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
Foohas defined a custom__init_subclass__. - Class
Barderives fromFooand 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 would simply add super().__init_subclass__() to the last line of SubclassWithMeta.__init_subclass__.