2016-12-23 11 views
5

Python'u öğrenmeye başladım ve öncelikli olarak Java geliştiricisi olarak sahip olduğum en büyük sorun tip kontrolünü ne zaman ve ne zaman kullanamadığımı anlamak. Çoğu insan Python kodunun tip kontrolüne ihtiyaç duymaması gerektiğini söylüyor, ancak gerektiğine inandığım birçok vaka var. Örneğin, bir aritmetik işlemi gerçekleştirmek için bir yöntem parametresi kullanmam gerektiğini varsayalım, neden argümanın sayısal bir veri türü olduğundan emin olmamalıyım?Python'da tip denetimi (hiç yapılmışsa) ne zaman kullanmalıyım?

Bu sorun yalnızca işlevlerle sınırlı değildir. Aynı düşünce süreci, sınıf değişkenleri için bende gerçekleşir. Düzenli olarak uygulanan sınıf değişkenleri yerine türü kontrol etmek için neden ve ne zaman kullanmalıyım (@property kullanarak)?

Bu benim için gelişime yeni bir yaklaşım getiriyor, bu yüzden anlamada yardımcı olmaktan memnuniyet duyarım. ördek gibi yürür ve daha sonra bir ördek bir ördek gibi quacks, bu bir ördek gibi görünüyorsa:

+12

Neden *, * yönteminizin sayısal bir tür aldığını kontrol ediyor musunuz? Yapmazsa, tek yapabileceğiniz bir çeşit istisnadır; ancak desteklemeyen bir türde aritmetik işlem yapmayı denediğinizde, bir istisna * zaten * yükseltilebilir. Öyleyse açıkça kontrol etme amacı nedir? –

+3

İlgili - http://stackoverflow.com/questions/1950386/is-it-pythonic-to-check-function-argument-types –

+0

Olası yinelenen [Python türü denetimini zorlamam gerekir mi?] (Http: // stackoverflow. com/questions/17493159/should-i-force-python-type-checking) – gerosalesc

cevap

5

Bu tip bilgileri kontrol yerine ördek yazmaya kullanmamayı Pythonic bu.

def quack(duck): 
    duck.quack() 

duck bir çağrılabilir quack attrubute varsa bu sadece çalışır, aksi arayan tarafından yakalanmış olabilir istisna yükseltecektir.

+0

Sadece kayıt için, ördek yazarak terim için bazı arka plan: http://stackoverflow.com/questions/4205130/what-is-duck-typing – ppasler

+0

Sorun genellikle, yalnızca kullanıcı köpürürler istendiğinde istemek Widget'ı belirli bir şekilde, ve böylece birisinin bir Ördek yerine bir Köpek'i sadece en önemli demoda geçirdiğini keşfedersiniz. –

0

Basit cevap muhtemelen herhangi bir yazım denetimi gerektirmeden başlıyor ve ne olduğunu görüyor. Muhtemelen 17 yıl önce yaptığım gibi ve sürprizime çok benzediğini - inandığını düşündüğünüzden daha azını öğreneceksiniz. Kullanılan kayıtlar için, hızlı komut dosyaları ve oyuncak programlarını yazmayı düşünemediyseniz, ciddi bir yazım denetimi yapmadan ve ciddi bir python uygulaması koduyla stdlib kodunu okumaya başlayana kadar çok fazla dili kaybettim. olmadan çalıştı.