[python] jak 'odekorovat' property?

david servigo na seznam.cz
Neděle Listopad 5 21:13:52 CET 2006


> Pokud vim, tak dekoratory funguji jenom na funkce, takze vas dotaz je
> dost nejasny. To, ze narazite pri pokusu o predefinovani neceho, co je
> read-only, je celkem bezne, ikdyz ani to nemusi byt neresitelne.
> Co vlastne chcete udelat? 

Chtel jsem pouzit dekorator na funkci, ktera je pouzita pri definici property. A to samo o sobe probehne tak jak ma(aspon myslim ;-) ) Problem je potom to, ze property potom nepouziva tu novou funkci. Takze se omlouvam za nepresnou formulaci: asi vazne nezalezi na tom, jestli je property readonly nebo ne, problem je v tom, jak predefinovat/updatovat/opravit existujici property tak, aby vyuzivala zmenenou funkci. Nevim jestli jsem to napsal vystizne: nejlepsi bude asi priklad:

def Decorator(old):
    def novafunkce(*a,**kw):
        print 'treba logovani:',
        old_result=old(*a,**kw)
        return old_result
    return novafunkce
class Example(object):
    def __init__(self,desc):
        self._description=desc
    def hello(self):
        print "hello world"
    def getdescription(self):
        print "property funkce",
        return self._description
    description=property(getdescription)

e=Example("POPIS")

e.hello()
print e.getdescription()
print e.description

e.hello=Decorator(e.hello)
e.getdescription=Decorator(e.getdescription)

e.hello()
print e.getdescription()
print e.description #nevola novou funkci!
------------- další část ---------------
Netextová příloha byla odstraněna...
Jméno: demo.py
Typ: text/x-c++
Velikost: 686 bytes
Popis: [žádný popis není k dispozici]
Url : http://www.py.cz/pipermail/python/attachments/20061105/ca748369/attachment.bin 


Další informace o konferenci Python