Return class.

Satish ML satishmlwizpro at gmail.com
Sat Jul 26 20:29:32 CEST 2014


Hi,

What does "return Wrapper" do in the following piece of code? Which method does it invoke?
I mean "return Wrapper" invokes __init__ method?

def Tracer(aClass):
    class Wrapper:
        def __init__(self, *args, **kargs):
            self.fetches = 0
            self.wrapped = aClass(*args, **kargs)
        def __getattr__(self, attrname):
            print('Trace: ' + attrname)
            self.fetches += 1
            print(self.fetches)
            return getattr(self.wrapped, attrname)
    return Wrapper


Actual program:

def Tracer(aClass):
    class Wrapper:
        def __init__(self, *args, **kargs):
            self.fetches = 0
            self.wrapped = aClass(*args, **kargs)
        def __getattr__(self, attrname):
            print('Trace: ' + attrname)
            self.fetches += 1
            print(self.fetches)
            return getattr(self.wrapped, attrname)
    return Wrapper
@Tracer
class Spam:
    def __init__(self, *args):
        print(*args)
    def display(self):
        print('Spam!' * 8)

@Tracer
class Person:
    def __init__(self, name, hours, rate):
        self.name = name
        self.hours = hours
        self.rate = rate
    def pay(self):
        return self.hours * self.rate

food = Spam("CARST")
food.display()
print([food.fetches])

bob = Person('Bob', 40, 50)
print(bob.name)
print(bob.pay())

print('')
sue = Person('Sue', rate=100, hours=60)
print(sue.name)
print(sue.pay())

print(bob.name)
print(bob.pay())
print([bob.fetches, sue.fetches])



More information about the Python-list mailing list