class HelloDescriptor: def __get__(self, obj, objtype=None): return self.hello class Foo(HelloDescriptor): def hello(self): return 42 class Bar(HelloDescriptor): hello = Foo() class Baz(HelloDescriptor): hello = Bar() class Spam(HelloDescriptor): hello = Baz() spam_instance = Spam() print(spam_instance.hello())