File: LP6E/Chapter40/extend_deco.py
"Extend a class with a decorator"
def triple(obj):
return obj.value * 3
def concat(obj):
return obj.value + 'Code!'
def extender(aClass):
aClass.triple = triple # Manages class, not instance
aClass.concat = concat # Same as metaclass __call__
return aClass
@extender
class Client1: # Client1 = Extender(Client1)
def __init__(self, value): # Rebound at end of class stmt
self.value = value
def double(self):
return self.value * 2
@extender
class Client2:
value = 'grok'
X = Client1('hack')
print(X.double(), X.triple(), X.concat(), sep='\n')
Y = Client2()
print(Y.triple(), Y.concat(), sep='\n')