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

  • Ciaran Blumenfeld

    Ciaran Blume

    20 NİSAN 2009
  • JTechTalk

    JTechTalk

    11 Temmuz 2010
  • UrAvgConsumer

    UrAvgConsume

    1 Ocak 2012