SORU
11 AĞUSTOS 2009, Salı


Derslerinde Python dekoratörler

Bir heyecanla beklediğim gibi yazabilirsiniz:

class Test(object):
    def _decorator(self, foo):
        foo()

    @self._decorator
    def bar(self):
        pass

Bu başarısız: @kendini bilinmeyen, kendi kendini

Ben de denedim:

@Test._decorator(self)

ayrıca başarısız olan: Test bilinmiyor

Eğer temp. değişiklik bazı örnek değişkenleri dekoratör ve dekore yöntemini çalıştırmak, daha önce onları geri değiştirmek.

Teşekkürler.

CEVAP
12 AĞUSTOS 2009, ÇARŞAMBA


Böyle bir şey ne olurdu?

class Test(object):
    def _decorator(foo):
        def magic( self ) :
            print "start magic"
            foo( self )
            print "end magic"
        return magic

    @_decorator
    def bar( self ) :
        print "normal call"

test = Test()

test.bar()

Bu öz çağrı dekoratör erişim önler ve düzenli bir yöntem olarak sınıf ad gizli kalıyor.

>>> import stackoverflow
>>> test = stackoverflow.Test()
>>> test.bar()
start magic
normal call
end magic
>>> 

düzenlenmiş yorumlarda soru cevap için:

Nasıl bir sınıf içinde gizli dekoratör kullanmak için

class Test(object):
    def _decorator(foo):
        def magic( self ) :
            print "start magic"
            foo( self )
            print "end magic"
        return magic

    @_decorator
    def bar( self ) :
        print "normal call"

    _decorator = staticmethod( _decorator )

class TestB( Test ):
    @Test._decorator
    def bar( self ):
        print "override bar in"
        super( TestB, self ).bar()
        print "override bar out"

print "Normal:"
test = Test()
test.bar()
print

print "Inherited:"
b = TestB()
b.bar()
print

Bunu Paylaş:
  • Google+
  • E-Posta
Etiketler:

YORUMLAR

SPONSOR VİDEO

Rastgele Yazarlar

  • ASUS Campus Life

    ASUS Campus

    18 Mart 2013
  • CorridorDigital

    CorridorDigi

    17 Mayıs 2010
  • LIVESTRONG.COM

    LIVESTRONG.C

    5 EKİM 2005