SORU
22 Temmuz 2009, ÇARŞAMBA


Python, nasıl gösterir'm ağır basan bir yöntem?

Örneğin Java, @Override açıklama değil, sadece bir derleme otomatik pilot kontrol sağlar ama mükemmel için kendi kendine tanım kod yapar. Sadece belgeler ise pylint gibi bazı denetleyicisi için bir gösterge ise, bu bir bonus olsa da () arıyorum. Yorum ya da bir kütüphane bir yere ekleyebilirsiniz, ama ne Python geçersiz kılma gösteren deyimsel bir yolu mu?

CEVAP
29 Kasım 2011, Salı


GÜNCELLEME (23.05.2015): bu ve fwc Göre:s pip yüklenebilir bir paket https://github.com/mkorpela/overrides ben yarattım cevap

Zaman zaman burada bu soruyu bakarken buluyorum. Esas bu (tekrar) kod tabanı aynı hatayı gördükten sonra olur: Biri "arayüz "arayüz".. . bu bir yöntem, yeniden adlandırma sırasında" sınıf uygulama bazı unutmadı

Python Java değil ama Python güç ve açık olan şey örtülü olmasından çok daha iyidir ve bu şey bana yardımcı olacak gerçek dünyada gerçek somut durumlar vardır.

Burada geçersiz kılar dekoratör bir kroki. Bu sınıf parametre olarak verilen yöntem dekore edilmiş olarak (veya bir şey) aynı yöntem adı olup olmadığını kontrol edin.

Eğer aklınıza daha iyi bir çözüm onu buraya gönderin!

def overrides(interface_class):
    def overrider(method):
        assert(method.__name__ in dir(interface_class))
        return method
    return overrider

Aşağıdaki gibi çalışır

class MySuperInterface(object):
    def my_method(self):
        print 'hello world!'


class ConcreteImplementer(MySuperInterface):
    @overrides(MySuperInterface)
    def my_method(self):
        print 'hello kitty!'

ve eğer hatalı bir sürüm yaparsan sınıf yükleme sırasında bir onaylama işlemi hatası yetiştireceği:

class ConcreteFaultyImplementer(MySuperInterface):
    @overrides(MySuperInterface)
    def your_method(self):
        print 'bye bye!'

>> AssertionError!!!!!!!

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

YORUMLAR

SPONSOR VİDEO

Rastgele Yazarlar

  • ChannelRichard

    ChannelRicha

    7 Kasım 2008
  • Kamikazeepanda

    Kamikazeepan

    5 ŞUBAT 2006
  • wwjoshdew

    wwjoshdew

    1 AĞUSTOS 2007