SORU
14 Mayıs 2010, Cuma


Nasıl Python polimorfizmi çalışır?

Python yeniyim... ve eğer bir şey için hesap, genelde bir Java arka plan geliyor.

Python polimorfizmi anlamaya çalışıyorum. Belki de sorun zaten Python proje bilmek kavramları bekliyorum. Ama birlikte aşağıdaki test kodu koydum:

class animal(object):
    "empty animal class"

class dog(animal):
    "empty dog class"

myDog = dog()
print myDog.__class__ is animal
print myDog.__class__ is dog

Benim alışık olduğum polimorfizmi (örneğin java instanceof), köpek bir örneği olarak yazdırma true bu tabloların her ikisi de beklenebilirbirhayvan dabirköpek. Ama benim çıktı

False
True

Neyi kaçırıyorum?

CEVAP
14 Mayıs 2010, Cuma


İki bağımsız değişken, bellekteki aynı nesneye bakın; C is operatör gibi değil Python denetler is operatör#.

From the docs:

X y doğru ise ve eğer x ve y aynı nesne ise. operatörler ve nesne kimliği için test değil: x y verimi ters gerçek değeri değil.

Bu durumda aradığınızı isinstance.

Geri eğer nesne değişkeni classınfo tartışmanın bir örneği, ya da bir gerçek (doğrudan ya da dolaylı olarak bunların alt sınıfı.

>>> class animal(object): pass

>>> class dog(animal): pass

>>> myDog = dog()
>>> isinstance(myDog, dog)
True
>>> isinstance(myDog, animal)
True

Ancak, deyimsel Python (neredeyse) hiç bu tür denetleme yapmak, ama polimorfik davranış için duck-typing güvenmek yerine belirler. Hiçbir şey isinstance ama genellikle Kaçınılması gerektiğini kalıtımı anlamak için kullanarak yanlış "" kod. üretim var

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

YORUMLAR

SPONSOR VİDEO

Rastgele Yazarlar

  • megablueblaster

    megablueblas

    23 HAZİRAN 2006
  • theKGB65

    theKGB65

    24 Aralık 2007
  • undrmyumbrellaa

    undrmyumbrel

    25 Temmuz 2012