class Fluent: def __init__(self, cache=None): self._cache = cache or [] # Build the cache, and handle special cases def _(self, name): # Enables method chaining return Fluent(self._cache + [name]) # Reflection def __getattr__(self, name): return self._(name) # Set name def _name(self, name): return self._(name) # Final method call def execute(self): return " ".join(self._cache) # New object fluent = Fluent() # 'is' is a Python reserved word result = fluent.hello.my.name._('is')._name('Adierebel').execute() print(result) # API example api = fluent.get.user.info.execute() print(api)