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

  • ☆ SUB4SUB CENTER! ☆ spam here

    ☆ SUB4SUB

    22 ŞUBAT 2010
  • ehowhome

    ehowhome

    22 NİSAN 2009
  • habpsu

    habpsu

    25 Temmuz 2007