たとえば継承していることを警告したい場合とかに使える。 実装はこのようになる。
class C: def __init_subclass__(cls, *args, **kwargs): super().__init_subclass__(*args, **kwargs) original = cls.__repr__ def extended_repr(self): return f'{original(self)}(parent is {super().__thisclass__.__name__})' cls.__repr__ = extended_repr class A(C): def __repr__(self): return 'This is A instance.' assert repr(A()) == 'This is A instance.(parent is C)'
__new__
だと上書きできないので __init_subclass__
を使って拡張することになる。
なぜかはよくわからないのでドキュメントを熟読するしかないのである。