Yapıcılar, atamalar ve yöntem çağrıları söz konusu olduğunda, PyCharm IDE kaynak kodumu analiz etme ve her bir değişkenin ne tür olması gerektiğini bulma konusunda oldukça iyidir. Doğru olduğunda seviyorum, çünkü bana iyi bir kod tamamlama ve parametre bilgisi veriyor ve var olmayan bir özniteliğe erişmeye çalışırsam bana uyarı veriyor.
Ancak, parametreler söz konusu olduğunda, hiçbir şey bilmez. Kod tamamlama açılır listeleri hiçbir şey gösteremez, çünkü parametrenin ne tür olacağını bilmezler. Kod analizi uyarı arayamaz.
class Person:
def __init__(self, name, age):
self.name = name
self.age = age
peasant = Person("Dennis", 37)
# PyCharm knows that the "peasant" variable is of type Person
peasant.dig_filth() # shows warning -- Person doesn't have a dig_filth method
class King:
def repress(self, peasant):
# PyCharm has no idea what type the "peasant" parameter should be
peasant.knock_over() # no warning even though knock_over doesn't exist
King().repress(peasant)
# Even if I call the method once with a Person instance, PyCharm doesn't
# consider that to mean that the "peasant" parameter should always be a Person
Bu belli bir anlam ifade ediyor. Diğer çağrı siteleri bu parametre için her şeyi iletebilir. Ancak benim yöntemim bir parametre türünü pygame.Surface
beklerse, diyelim ki, bunu bir şekilde PyCharm'a gösterebilmek istiyorum, bu yüzden bana tüm Surface
kod özelliklerini tamamlama açılır listesinde gösterebilir ve uyarıları vurgulayın Yanlış yöntemi çağırıyorum vb.
PyCharm'a bir ipucu vermenin ve "psst, bu parametrenin X tipi olması gerekiyor" diyebilmemin bir yolu var mı? (Ya da, belki de dinamik diller ruhu içinde, "bu parametrenin X gibi quack yapması gerekiyor"? Bununla iyi olur.)
EDIT: CrazyCoder yanıt, aşağıda, hile yapar. Hızlı özet isteyen benim gibi yeni gelenler için işte burada:
class King:
def repress(self, peasant):
"""
Exploit the workers by hanging on to outdated imperialist dogma which
perpetuates the economic and social differences in our society.
@type peasant: Person
@param peasant: Person to repress.
"""
peasant.knock_over() # Shows a warning. And there was much rejoicing.
İlgili bölüm @type peasant: Person
doktora çizgisidir.
Ayrıca Dosya> Ayarlar> Python Entegre Araçları'na gidip "Doküman Biçimi" ni "Epytext" olarak ayarlarsanız, PyCharm'ın Görünümü> Hızlı Doküman Arama, tüm @ satırlarını olduğu gibi yazdırmak yerine parametre bilgilerini güzel bir şekilde yazdırır.
@param xx: yyy
olur:param xx: yyy
. Bkz. Jetbrains.com/pycharm/webhelp/…