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

  • iBand IguJoo

    iBand IguJoo

    25 AĞUSTOS 2006
  • Jucyber Tutoriais

    Jucyber Tuto

    8 EYLÜL 2009
  • Mega64

    Mega64

    24 ŞUBAT 2006