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

  • PorterRobinsonVEVO

    PorterRobins

    11 Kasım 2013
  • RealPapaPit

    RealPapaPit

    16 Mart 2009
  • SaMmM123

    SaMmM123

    3 Mayıs 2006