示例#1
0
class Person(metaclass=decorateAll(timer(label='***'))):  # Применяет деократор timer, 
    def __init__(self, name, pay):                        # с аргументами 
        self.name = name
        self.pay = pay
    def giveRaise(self, percent):
        self.pay *= (1.0 + percent)
    def lastName(self):
        return self.name.split()[-1]
示例#2
0
def listcomp(N):                           # Like listcomp = timer(...)(listcomp)
    return [x * 2 for x in range(N)]       # listcomp(...) triggers Timer.__call__

@timer(trace=True, label='[MMM]==>')
示例#3
0
    def giveRaise(self, percent):            # giveRaise = timer()(giverRaise)
        self.pay *= (1.0 + percent)          # tracer remembers giveRaise

    @timer(label='**')
示例#4
0
                setattr(aClass, attr, decorator(attrval))  # Не __dict__
        return aClass
    return DecoDecorate

@decorateAll(tracer)                      # Используется декоратор класса
class Person:                             # Применяет декоратор func к методам
    def __init__(self, name, pay):        # Person = decorateAll(..)(Person)           
        self.name = name                  # Person = DecoDecorate(Person)
        self.pay = pay
    def giveRaise(self, percent):
        self.pay *= (1.0 + percent)
    def lastName(self):
        return self.name.split()[-1]

bob = Person('Bob Smith', 50000)
sue = Person('Sue Jones', 100000)
print(bob.name, sue.name)
sue.giveRaise(.10)
print(sue.pay)
print(bob.lastName(), sue.lastName())


@decorateAll(tracer) # Декорирует все методы декоратором tracer
@decorateAll(timer()) # Декорирует все методы декоратором timer со значениями
# аргументов по умолчанию defaults
@decorateAll(timer(label='@@')) # То же самое, но определяет
# аргумент декоратора


##################################################