Ketika sampai pada konstruktor, dan penugasan, dan pemanggilan metode, PyCharm IDE cukup bagus dalam menganalisis kode sumber saya dan mencari tahu tipe apa yang harus dimiliki setiap variabel. Saya suka ketika itu benar, karena itu memberi saya penyelesaian kode dan parameter info yang baik, dan itu memberi saya peringatan jika saya mencoba mengakses atribut yang tidak ada.
Tetapi ketika datang ke parameter, ia tidak tahu apa-apa. Dropdown penyelesaian kode tidak dapat menampilkan apa pun, karena mereka tidak tahu tipe parameter apa yang akan ditampilkan. Analisis kode tidak dapat mencari peringatan.
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
Ini masuk akal. Situs panggilan lain dapat melewatkan apa pun untuk parameter itu. Tetapi jika metode saya mengharapkan parameter bertipe, katakan,, pygame.Surface
saya ingin dapat menunjukkan hal itu kepada PyCharm, jadi itu bisa menunjukkan semua Surface
atribut dalam dropdown penyelesaian kode, dan menyoroti peringatan jika Saya menyebut metode yang salah, dan seterusnya.
Apakah ada cara saya bisa memberi PyCharm petunjuk, dan mengatakan "psst, parameter ini seharusnya tipe X"? (Atau mungkin, dalam semangat bahasa dinamis, "parameter ini seharusnya dukun seperti X"? Aku akan baik-baik saja dengan itu.)
EDIT: Jawaban CrazyCoder, di bawah, berhasil. Untuk pendatang baru seperti saya yang menginginkan ringkasan cepat, ini dia:
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.
Bagian yang relevan adalah @type peasant: Person
garis docstring.
Jika Anda juga pergi ke File> Settings> Python Integrated Tools dan mengatur "Format Docstring" ke "Epytext", maka PyCharm's View> Quick Documentation Lookup akan mencetak informasi parameter dengan cantik, bukan hanya mencetak semua @ -baris sebagaimana adanya.
sumber
@param xx: yyy
menjadi:param xx: yyy
. Lihat jetbrains.com/pycharm/webhelp/…Jawaban:
Ya, Anda dapat menggunakan format dokumentasi khusus untuk metode dan parameternya sehingga PyCharm dapat mengetahui jenisnya. Versi PyCharm terbaru mendukung format dokumen paling umum .
Sebagai contoh, PyCharm mengekstrak tipe dari komentar gaya @param .
Lihat juga Konvensi reStructuredText dan docstring (PEP 257).
Opsi lain adalah anotasi Python 3.
Silakan merujuk ke bagian dokumentasi PyCharm untuk lebih detail dan sampel.
sumber
Jika Anda menggunakan Python 3.0 atau yang lebih baru, Anda juga dapat menggunakan anotasi pada fungsi dan parameter. PyCharm akan menginterpretasikan ini sebagai tipe argumen atau nilai pengembalian yang diharapkan dimiliki:
Terkadang ini berguna untuk metode non-publik, yang tidak perlu didokumentasikan. Sebagai manfaat tambahan, anotasi tersebut dapat diakses dengan kode:
Pembaruan : Pada PEP 484 , yang telah diterima untuk Python 3.5, itu juga merupakan konvensi resmi untuk menentukan argumen dan mengembalikan tipe menggunakan anotasi.
sumber
typecheck-decorator
adalah salah satu paket tersebut dan memiliki ringkasan yang lain dalam dokumentasinya. (Fleksibel juga: Anda bahkan dapat melakukan pengetikan tipe bebek yang diperiksa!)PyCharm mengekstraksi jenis dari string pydoc @type. Lihat dokumen PyCharm di sini dan di sini , dan dokumen Epydoc . Itu ada di bagian 'warisan' dari PyCharm, mungkin tidak memiliki beberapa fungsi.
Bagian yang relevan adalah
@type peasant: Person
garis docstring.Tujuan saya bukan untuk mencuri poin dari CrazyCoder atau penanya semula, dengan cara apa pun memberi mereka poin mereka. Saya hanya berpikir jawaban sederhana harus di slot 'jawaban'.
sumber
Saya menggunakan PyCharm Professional 2016.1 menulis kode py2.6-2.7, dan saya menemukan bahwa menggunakan reStructuredText saya dapat mengekspresikan tipe dengan cara yang lebih succint:
Lihat: https://www.jetbrains.com/help/pycharm/2016.1/type-hinting-in-pycharm.html#legacy
sumber
Anda juga dapat menegaskan untuk suatu tipe dan Pycharm akan menyimpulkannya:
sumber