from cached_classproperty import cached_classproperty
class Superclass:
@classmethod
def my_classmethod(cls):
return ('Superclass.x',)
@cached_classproperty
def my_cached_classproperty(cls):
return cls.my_classmethod()
class Subclass1(Superclass):
@classmethod
def my_classmethod(cls):
return (*super().my_classmethod(), 'Subclass1.x',)
class Subclass2(Superclass):
@classmethod
def my_classmethod(cls):
return (*super().my_classmethod(), 'Subclass2.x',)
class Finalclass(Subclass1, Subclass2):
@classmethod
def my_classmethod(cls):
return (*super().my_classmethod(), 'Finalclass.x',)
print("Subclass2.my_cached_classproperty", Subclass2.my_cached_classproperty)
print("Superclass.my_cached_classproperty", Superclass.my_cached_classproperty)
print("Finalclass.my_cached_classproperty", Finalclass.my_cached_classproperty)
print("Subclass1.my_cached_classproperty", Subclass1.my_cached_classproperty)
print("Superclass.my_classmethod()", Superclass.my_classmethod())
print("Finalclass.my_classmethod()", Finalclass.my_classmethod())
print("Subclass1.my_classmethod()", Subclass1.my_classmethod())
print("Subclass2.my_classmethod()", Subclass2.my_classmethod())
Subclass2.my_cached_classproperty ('Superclass.x', 'Subclass2.x')
Superclass.my_cached_classproperty ('Superclass.x',)
Finalclass.my_cached_classproperty ('Superclass.x', 'Subclass2.x')
Subclass1.my_cached_classproperty ('Superclass.x',)
Superclass.my_classmethod() ('Superclass.x',)
Finalclass.my_classmethod() ('Superclass.x', 'Subclass2.x', 'Subclass1.x', 'Finalclass.x')
Subclass1.my_classmethod() ('Superclass.x', 'Subclass1.x')
Subclass2.my_classmethod() ('Superclass.x', 'Subclass2.x')
$ python --version
Python 3.10.12