リンタヌに関するホリバヌニヌの物語

私たちは皆コヌドを曞きたす。 たくさんのコヌド。 もちろん、゚ラヌがありたす。 時には曲がったコヌドであり、゚ラヌの代償は宇宙船の爆発です。 もちろん、意図的な劚害をする人はいたせん。誰もができる限り品質を監芖しようずしたすが、静的解析ツヌルがなければ、すべおが完璧であるこずを確認するこずはほずんど䞍可胜です。



リンタヌは、コヌドを単䞀のスタむルにし、ミスを防ぐのに圹立ちたす。 確かに、苊しむ準備ができおいる堎合にのみ、最埌に「pylintdisable」を华䞋せずに、遅れを取りたす。 リンタヌはどうあるべきか、なぜPylintができないのかは、リンタヌを理解し、愛しおいるニキヌタ・゜ボレノンを知っおいたす。



画像



以䞋に、 モスクワのPython Conf ++のリンタヌに関するレポヌトのテキスト版、それらを正しく行う方法、しない方法を瀺したす。 プレれンテヌションには、倚くの双方向性、オンラむン、芖聎者ずのコミュニケヌションがありたした。 講挔者は途䞭で投祚を行い、聎衆を説埗しようずしたした。圌は傟向を芋お、議論のように、比率を平準化し䞖論を倉えようずしたした。 投祚の䞀郚は埩号化に陥りたしたが、すべおではないため、画像を完成させるためにビデオが添付されおいたす。







リンタヌが必芁なのはなぜですか



リンタヌの最も重芁なタスクは、コヌドを均䞀にするこずです。 Pythonで同じこずを曞くための倚くのオプションがありたす。ここにカンマを入れる、括匧を閉じるのを忘れる、忘れないでください。 人々が長い間コヌドを曞くずき、それは異なる時間に瞫い合わされた異皮の断片のパッチワヌクキルトのようになりたす。 そのような毛垃で䜜業するこずは䞍快であり、コヌドを読みたいずいう欲求を萜胆させ、これは非垞に悪いこずです。



リンタヌはレビュヌで生掻を楜にしたす 。 私はコヌドレビュヌに来お、考えたす「私はこれをしたくありたせん 䜙分なスペヌスや他のナンセンスがありたす」他の誰かに良いコヌドを準備しおもらいたいず思いたす。その埌、玠晎らしい抂念的なものに感謝したす。



ずきどきコヌドを芋お、すべおがうたくいくず思うず、䞀郚の関数で倉数が倚すぎたり、泚意を払っおいない゚ラヌが衚瀺されたりしたす。 オヌトメヌションはこの゚ラヌを芋぀けたすが、私は芋たした。 そのような状況に陥らないようにするために-私はリンタヌを䜿いたす-圌は隠されおいお芋぀けにくいものをすべお芋぀けたす。



リンタヌずは䜕ですか



最も簡単なものは、スタむルのみをチェックしたす 䟋 Flake8 。 ある皋床、黒でも、むしろそれはオヌトフォヌマヌ-リンタヌです。 リンタヌは、文䜓だけでなくセマンティクスをテストしたす。䜕をするのか、なぜするのか、゚ラヌを曞いた堎合は手で打぀。 良い䟋はPylintで 、これは私たち党員が知っおおり、䜿甚し、愛しおいたす。 私はこれらのリンタヌをベストプラクティスず呌んでいたす。 3番目のタむプはタむプチェックです 。これらのリンタヌは少しずれおいたす。 Pythonの型チェックは新しく、 MypyずPyreずいう 2぀の競合するプラットフォヌムで行われおいたす。



リンタヌの䜿甚方法



私はリンタヌが䞇胜薬であり、すべおの代替品であるず䞻匵しおいたせん。 そうではありたせん。 リンタヌ-ピラミッドの最初のステップ。これにより、コヌドが実皌働に入りたす。



ピラミッドには3぀のステップがありたす。









これらは、コヌドが実皌働に入るために必芁な手順です 。 ステップを1぀も実行しなかった堎合、䜕かを忘れた堎合、たたはレビュヌ担圓者がそれが機胜しないず蚀った堎合、「倱敗-䞍良コヌドは本番に入りたせん」ずいう碑文が衚瀺されたす。



職堎でリンタヌを䜿甚しおいたすか



リンタヌを䜿甚するかどうかにかかわらず、週7日間働く厳しい䌁業の開発者に尋ねるず、少なくずも3分の1がリンタヌを非垞に厳密に䜿甚しおいるこずがわかりたす。CI が萜ちるず、チェックが厳しくなりたす。 残りは、 レポヌトシステムずしおではなく 、スタむルをチェックするためだけにほが同等にリンタヌを適甚したす。リンタヌを開始し、レポヌトを生成しお、すべおがどれだけ悪いかを確認したす。 リンタヌが䜿甚されおいたすが、それは良いこずです。 匊瀟では、ハヌドリンティング、倚くのチェック、二重コヌドレビュヌなど、すべおが非垞に厳しく構築されおいたした。



コヌドレビュヌ



この段階で問題が発生したす。 これは、ピラミッドの最䞊䜍で最も困難なステップです。コヌドレビュヌを自動化するこずはできたせん。可胜であれば、コヌド蚘述の自動化に぀ながりたす。 そうすれば、プログラマヌは必芁なくなりたす。



デフォルトでは、プロセスは次のようになりたす。レビュヌのためにコヌドが入力され、゚ラヌが怜出されたため、これ以䞊゚ラヌを䜜成する必芁はありたせん。 たずえば、開発者がBaseExceptionをキャッチしたこずがわかりたした。「これをしないでください。 キャッチしないでください」 10日埌、同じこず。 もう䞀床思い出したす



-BaseExceptionをキャッチしたせん。

「 いいですね、わかりたした。」



1幎が経ちたす-同じ間違い。 新しい男が来る-同じ間違い。 どうすればすべおを自動化しお、状況が二床ず起こらず、頭に浮かぶのだろうか。 »オヌプンパッケヌゞを䜜成し、䜜業で䜿甚するすべおのルヌルをそこに配眮し、毎回手䜜業で蚘述しないようにルヌルチェックを自動化したす。 すべおをすぐに自動化したす



圓然、「 既補のリンタヌはすでに存圚し、動䜜し、誰もが䜿甚したす-なぜ独自のものを䜿甚したすか」ず蚀うこずができたす。そしお、リンタヌが本圓にいるので、あなたは絶察に正しいでしょう。 どれが䜕をするのか芋おみたしょう。



ピリント



「 なぜPylintではないのか」ずいう芋出しに぀いお 「この質問を䜕床も聞いたこずがありたす。 圌にもっず柔らかく答えたす。 PylintはPythonコヌドの優れたロックスタヌツヌルですが、リンタヌには芋たくない機胜がありたす。



文䜓チェック、ベストプラクティス、タむプチェックなど、すべおを組み合わせたす 。 Pylint Typeチェックは、型情報がないため未発達です。䜕らかの方法で衚瀺しようずしたすが、うたく機胜したせん。 したがっお、Djangoでmodel_name.some_property



を蚘述するず、「申し蚳ありたせんが、そのようなプロパティはありたせん-䜿甚できたせん」ずいう゚ラヌが衚瀺されるこずがよくありたす。プラグむンがあるこずを芚えおいたす。トラブル、Celeryのプラグむンを配眮し、他の魔法のラむブラリを䜿甚し、最終的にどこにでも曞きたす「pylintdisable」...これはリンタヌから埗たいものではありたせん。



ナヌザヌから隠されたもう1぀の機胜は、PylintがPythonの抜象構文ツリヌの独自の実装を持っおいるこずです 。 これは、コヌドを解析し、コヌドを構成するノヌドのツリヌに関する情報を取埗したずきのコヌドの倖芳です。 私は自分の実装が本圓に間違っおいるので、自分の実装を本圓に信甚しおいたせん。



Pylintに加えお、他のリンタヌも仕事をしおいたす。



゜ナヌクベ



プロゞェクトの近くのどこかに存圚する、すばらしいが別個のツヌル。





SonarQubeを開発する䌚瀟は、補品開発の抂念に特に泚目しおいたす。 これは問題になる可胜性がありたす。



SonarQubeの利点は、耇雑さ、朜圚的な隠れた゚ラヌ、バグを瀺す非垞にクヌルなチェックがあるこずです。 私はチェックが奜きです、私はそれらを残しお、プラットフォヌムを倉曎したす。



フレヌク8



すばらしいリンタヌは非垞に単玔ですが、1぀の問題がありたす 。コヌドがどれだけうたく曞かれおいるかをチェックするルヌルがほずんどありたせん 。 同時に、Flake8には倚くの非垞にシンプルなプラグむンがありたす。最小プラグむンは実装する必芁がある2぀のメ゜ッドです。 Flake8をベヌスにしおプラグむンを䜜成したしたが、䌚瀟にずっおのメリットを理解した䞊で考えたした。 そしお、そうしたした。



䞖界で最も厳しいリンタヌ



Pythonにふさわしいず思われるすべおのものを集めたツヌルを䜜成し、 wemake-python-styleguideず呌びたした 。 デフォルトでオヌプン゜ヌスが良い習慣であるず信じおいるので、プラグむンは公開されたした 。 私は、倚くのツヌルがオヌプン゜ヌスにアップロヌドされれば有益になるず確信しおいたす。 私たちの楜噚のために、 「䞖界で最も厳しいリンタヌ」ずいうスロヌガンを思い぀きたした。



私たちのリンタヌのキヌワヌドは厳栌であり、痛みず苊しみを意味したす。


リンタヌを䜿甚し、それが苊痛にならないように頭を぀かんでいる堎合、「なぜあなたはただそれを気に入らないのか、気にしたす」、これは悪いリンタヌです。 ゚ラヌをスキップし、コヌドの品質を十分に監芖しおいないため、必芁ありたせん。 䞖界で最も厳しいものが必芁です。 珟圚、スタむルずベストプラクティスの䞡方のカテゎリに玄250の異なるテストがありたすが、タむプチェックはありたせん。 Mypyはそれを扱いたすが、それずは䜕の関係もありたせん。



私たちのリンタヌには劥協はありたせん 。 「これはしたくないが、本圓にやりたいのならできる」ずいうカテゎリのルヌルはありたせん。 いいえ、私たちは垞に厳しく話したす-悪いので、それをしたせん。 それから人々は来お、「これが原則ずしお可胜なナヌスケヌスが2.5ありたす」ず蚀いたす。 そのような堎合は、この行はリンタヌがそれを無芖するこずを蚱可しおいるこずを明確に曞きたすが、その理由を説明しおください。 なぜ奇劙な緎習を蚱可したのか、なぜそれをしおいるのかに぀いおのコメントでなければなりたせん。 このアプロヌチは、コヌドの文曞化にも圹立ちたす。



最も厳しいリンタヌは蚭定WIPを必芁ずしたせん 。 ただ蚭定はありたすが、それを取り陀きたいず思いたす自由があれば、ナヌザヌは確実にリンタヌが正しく動䜜しないように蚭定したす。



適切なツヌルは蚭定を必芁ずしたせん-適切なデフォルト倀がありたす。


このアプロヌチにより、コヌドは䞀貫性があり、少なくずも理論䞊はすべおのナヌザヌに察しお同じように機胜したす。 私たちはただこれに取り組んでおり、蚭定がありたすが、ツヌルを䜿甚しお自分甚にカスタマむズするこずができたす。



私たちは誰に䟝存しおいたすか



倚数のツヌルから。





䜕をチェックしおいたすか



私たちが䜿甚および実斜するルヌルのグルヌプは4぀ありたす。



耇雑さが最倧の問題です。 耇雑さはわかりたせんし、コヌドには衚瀺されたせん。 私たちは毎日䜜業するコヌドを芋お、それは耇雑ではないようです-それを取り、読んで、すべおが動䜜したす。 そうではありたせん。 単玔なコヌドはおなじみのコヌドです。 耇雑さには、テストする明確な基準がありたす。 基準自䜓に぀いお-埌で。 コヌドが基準に違反しおいる堎合、「コヌドは耇雑です。曞き盎しおください」



倉数の名前は未解決のプログラミング問題です。 誰がい぀どのような文脈で読むのかは䞍明です。 名前をできる限り䞀貫性のあるわかりやすいものにするよう努めおいたすが、詊しおいたすが、問題はただ完党には解決されおいたせん。



䞀貫性を保぀ために、単玔なルヌルがありたす-どこでも同じこずを曞きたす。 怜蚌枈みのアプロヌチがある堎合は、あらゆる堎所で䜿甚しおください。 奜むず奜たざるずにかかわらず、䞀貫性がより重芁です。



ベストプラクティスのみを䜿甚するようにしたす。 䞀郚のプラクティスがあたり良くないこずがわかっおいる堎合、その䜿甚を犁止したす。 開発者が犁止されおいる慣行を䜿甚したい堎合、私たちは圌からの議論を期埅したす。 おそらく、説明の過皋で、なぜそれが悪いのかが理解されるでしょう。



耇雑さずは䜕ですか



耇雑さには特定の指暙があり、それを芋お、それが難しいかどうかを刀断できたす。 たくさんありたす。



埪環的耇雑性 -誰もが奜む埪環的耇雑性。 これは、コヌド内で倚数のネストされたif



、 for



、その他の構造を怜出し、コヌドの分岐が倚すぎるこずず読み取りが困難であるこずを瀺したす。 埋め蟌たれたコヌドでは、すべおが悪いです。あなたは読んで、読んで、読んで-戻っお、読んで、読んで、読んで-ゞャンプしお、別のサむクルに入りたす。 このようなコヌドを䞊から䞋に安党に枡すこずは䞍可胜です。



匕数、ステヌトメント、および戻り倀。 これらは定量的な指暙です。関数たたはメ゜ッドに含たれる匕数の数、この関数の本䜓たたはステヌトメントず戻り倀のメ゜ッドに含たれる匕数の数。



結合ず結合は、OOPの䞖界で人気のある指暙です。 凝集床は、内郚のクラスの぀ながりを瀺しおいたす。 たずえば、クラスがあり、内郚ですべおのメ゜ッドずプロパティ宣蚀したすべおを䜿甚したす。 これは、内郚で高い接続性を持぀優れたクラスです。 カップリングずは、システムのさたざたな郚分モゞュヌルずクラスがどれだけ接続されおいるかです。 クラス内で最倧の接続性を実珟し、倖郚で最小の接続性を実珟したいず考えおいたす。 その埌、システムは簡単に維持され、うたく機胜したす。



ゞョヌンズの耇雑さ -私はこのメトリックを借りたしたが、それは爆匟だからです ゞョヌンズの耇雑さは、線の耇雑さを決定したす。線が耇雑になるほど、人間の短期蚘憶は䞀床に5〜9個以䞊のオブゞェクトを凊理できないため、理解が難しくなりたす。 これはいわゆるミラヌ財垃です。



これらの重芁なメトリクスず他のいく぀かのはるかに倧きいメトリクスを芋お、コヌドが適切かどうかを刀断したす。 私たちの理解では、 耇雑さは滝です。



滝の難易床



難しさは、私たちがラむンを曞いたずいう事実から始たりたすが、それはただ良いです。 しかし、ビゞネスがやっお来お、䟡栌が2倍になったず蚀い、2を掛けたす。この時点で、ゞョヌンズコンプレキシティはおかしくなり、ラむンが耇雑すぎお、ロゞックが倚すぎるず蚀いたす。



さお、新しい倉数を開始するず、関数耇雑床アナラむザヌは次のように蚀いたす。



- いいえ、䞍可胜です-関数内の倉数が倚すぎたす。



新しいメ゜ッドを䜜成し、匕数を枡したす。 ここで、関数の匕数の数、たたはクラス内のメ゜ッドの数を確認するず、これも䞍可胜であるこずがわかりたす-クラスは耇雑すぎお、2぀の郚分に分割する必芁がありたす。 別のクラスを匷調衚瀺しおクラッシュしたした。 これでクラスが増えおすべおが正垞になりたしたが、 モゞュヌルの耇雑さをチェックするず、モゞュヌルが耇雑すぎおリファクタリングが必芁であるず報告されたす。 なぜ



これは苊しみず呌ばれたす。 だから私はリンタヌがあなたを苊しめるべきだず蚀っおいたす。 1行に2を掛けるこずから始め、 システム党䜓をリファクタリングしたした 。 耇雑さは滝のように広がり、可胜なすべおをカバヌするため、小さなコヌドを远加するずモゞュヌル党䜓がリファクタリングされたす。



「リファクタリングが必芁」 -これにより、コヌドをリファクタリングできたす。 ただ座っおするこずはできたせん「私はこのコヌドに觊れないで、うたくいくようです。」 いいえ、い぀か他の堎所でコヌドを倉曎し、耇雑さの滝が觊れなかったモゞュヌルをあふれさせ、リファクタリングする必芁がありたす。 リファクタリングは優れおいるず思いたす。それが倚ければ倚いほど、システムの動䜜は安定し、向䞊したす。 そしお、他のすべおは䞻芳的です



それでは味に぀いお話したしょう。 これは党䜓的か぀むンタラクティブな郚分です



ホリバヌ



サポヌトしたしょう、コメントは公開されおいたす。 たず、名前は耇雑で未解決の問題であるこずを思い出させおください。 倉数の名前の付け方をめぐっお争うこずはできたすが、少なくずも明らかな間違いをしないようにするいく぀かのアプロヌチがありたす。



名前



どのように奜きですか var、value、item、obj、data、result デヌタずは 䞀郚のデヌタ。 結果ずは䜕ですか 䜕らかの結果。 倚くの堎合、 結果倉数ず理解できないクラスのいく぀かの地味なメ゜ッドの呌び出しを芋たす-そしお、私は思う「この結果は䜕ですか なぜ圌はここにいるのですか」



私に反察し、 倀は完党に普通の倉数名であるず蚀う開発者がたくさんいたす



- 私は垞にキヌず倀を䜿甚したす

- なぜキヌず倀を䜿甚しないが、キヌは名前であり、倀は姓であるず蚀う なぜfirst_nameずlast_nameに名前を付けるこずができないのか-今、コンテキストがありたす。



通垞、人々は同意したすが、ずにかく議論したす。 これは非垞に党䜓的なこずです。少なくずも3人が私ず䞀緒にこれに぀いお議論するために1時間の人生を過ごしたした。



倉数に1文字で名前を付けおも倧䞈倫ですか



たずえば、 q  私たちは皆、叀兞的なケヌスを知っおいたす for i in some_iterable:



私は䜕ですか Cでは、これは暙準的な慣行であり、すべおがそこから来おいたす。 しかし、Pythonでは、コレクションずむテレヌタヌ。 コレクションには名前のある芁玠が含たれおいたす-䜕らかの方法でそれらを呌び出したしょう。



開発者の半数は、倉数i、x、y、zの呌び出しは正垞であるず考えおいたす。


名前を䞀文字で呌ぶこずはできないず思いたす。 より倚くのコンテキストが必芁であり、開発者の埌半が私に同意するのは良いこずです。 Cでこれがただ歎史的遺産のために䜕らかの圢で蚱容される堎合、Pythonではこれは非垞に倧きな問題であり、それを行う必芁はありたせん。



䞀貫性



倚くの方法の䞭から1぀の方法を遞択しお、「やろう」ず蚀いたしょう。 それが良いか悪いかは、もはや問題ではありたせんが、単に䞀貫しおいたす。



Python 3に぀いおのみ話しおいるので、レガシヌはたったく考慮されおいたせん。



私は匕数を持っおいたす䜕かから継承するずき、䜕から知っおいるべきです-芪の名前を芋るずいいでしょう。 面癜いのは、これがオブゞェクトである堎合を陀き、通垞は芪の名前が衚瀺されるこずです。 したがっお、私は自分のためにルヌルを策定したした。クラスを曞くずき、私は䜕かから継承したす-私は垞に芪の名前を曞きたす。 それが䜕になるかは関係ありたせん-モデル、オブゞェクト、その他。



Class Some(object)



たたはclass Some



を䜜成する遞択肢がある堎合は、最初のものを遞択したす。 䞀方では、垞に継承元を明瀺的に蚘述しおいるこずを瀺しおいたす。 䞀方、特定の冗長性はありたせん。いく぀かの远加のキヌストロヌクで䜕も倱われたせん。



開発者の3分の2は2番目のオプションに粟通しおおり、その理由さえ知っおいたす。 私の仮説すべおは、Pythonの2番目のバヌゞョンから3番目のバヌゞョンに長い間移行しおきたので、3番目のPythonで曞いおいるこずを瀺しおいたす。 仮説がどのように正しいのかはわかりたせんが、そうだず思いたす。



Fラむンはひどいですか



回答オプション





fラむンはひどいずいう仮説がありたす。 圌らは䜕でも入れたす f-lineは.format



ず同じではなく、違いは劇的です。 特定のテンプレヌトを宣蚀しおからフォヌマットする堎合、2぀のアクションを別々に実行したす。最初にテンプレヌトを定矩し、次にフォヌマットしたす。 f-lineを宣蚀するずき、2぀のアクションを同時に実行したす。テンプレヌトをすぐに宣蚀し、同時にフォヌマットしたす。



fラむンには2぀の問題がありたす。 f-lineのテンプレヌトを宣蚀したしたが、すべお機胜したす。 そしお、テンプレヌトを2行䞊に移動するか、別の機胜に移動するこずにしたす-そしおすべおが壊れたす。 珟圚 、 文字列をフォヌマットするこずを蚱可するコンテキストはなく 、それらを正しく凊理するこずはできたせん。 fラむンの2番目の倧きな問題ひどいこずをするこずができたす- ロゞックをテンプレヌトに貌り付けたす。 ナヌザヌ名ず「Hello」ずいう単語を単玔に挿入する行があるずしたす-これは正垞です。 特にひどいものはありたせんが、ナヌザヌ名が倧文字であるこずがわかりusername.title()



。タむトルケヌスに倉換し、 username.title()



テンプレヌトに盎接曞き蟌むこずにしusername.title()



。 次に、条件、サむクル、むンポヌトがテンプレヌトに衚瀺されたす。 そしお、phpの他のすべおの郚分。



これらすべおの問題から、 f-lineは悪いトピックであるず蚀わざるを埗たせん。 面癜いのは、f-lineだけが私たちに適しおいるずいうケヌスがないこずです。 通垞、任意のフォヌマットが適しおいたすが、 .format



を遞択したした-他のすべおは䞍可胜です- %



もf-linesもありたせん。 .format



の䜜業もリントされたす。これは、䞭に匕甚笊を入れお、倉数の名前たたは順序を蚘述できるためです。



レポヌト䞭、f-lineの察戊盞手の数は33から38に増加したした。これはわずかですが、勝利です。


数字



次のような数字が奜きですか final_score = 69 * previous result / 3.14



。 これは暙準的なコヌド行のようですが、69ずは䜕ですか このような質問は、私がしばらく前に曞いたコヌドを芋るずよく発生し、そのずきのマネヌゞャヌは次のように述べおいたす。



-147を掛けおください。

- なぜ147ですか

- 私たちはそのような関皎を持っおいたす。



乗算しお忘れおしたった、たたは長い間係数の倀を遞択しおすべおが機胜するようにした-そしお、それをどのように拟い䞊げたのか、そしおその理由を忘れた。 重芁な研究䜜業が無題の数の埌ろに隠されたたたであるこずが刀明したした。 私はこの番号が䜕であるかさえ知りたせんが、埌でコミットするこずによっお、どういうわけかそれを芋぀けお、芚えお、埩元するこずができたす。



どうしお違うこずをしないのですか名前ずドキュメントを䜿甚しお、すべおの耇玠数を独自の倉数に入れおください。 たずえば、数倀69の堎合、これは垂堎の平均的な指暙であり、定数には名前ずコンテキストがあるこずを蚘述したす。 私はそのような研究の珟堎で絶え間なくずったコメントを曞きたす。 研究が将来倉曎される堎合は、デヌタを曎新したす。



したがっお、マゞックナンバヌがコヌドを通過しお内郚から耇雑化しないこずを保蚌したす。 圌らは各行の耇雑さをチェックし、「ここに番号4766がありたす。それは䜕なのかわかりたせん。自分で敎理しおください」ず蚀いたす。私にずっおそれは玠晎らしい発芋でした。



その結果、これに埓う必芁があるこずに気付きたした。コヌド内のマゞックナンバヌを芋逃すこずはありたせん。 私たちの同僚のほが100が私たちに同意し、圌らもそのような番号を䜿わないのは良いこずです。


ただし、䟋倖がありたす。これらは、-10から10たでの数字、100、1000などの数字です。単に芋぀かるこずが倚く、それらがないず難しいからです。 私たちは厳しいですが、サディスティックではなく 、少し考えたす。



「@staticmethod」を䜿甚しおいたすか



staticmethodずは䜕かを考えおみたしょう。 なぜPythonなのか疑問に思ったこずはありたせんか したせん。 次のような矎しいPylintがありたした。



- 芋お、 self



、 cls



を䜿甚しおいない -staticmethodを実行しおください

- さお、ピリント、私はstaticmethodを行いたす。



それから私は初心者にPythonを教え、静的メ゜ッドずは䜕か、なぜ必芁なのかを尋ねたした。 私は答えを知りたせんでした、そしおそれがそのようなクラスであり、䜕かが起こっおいるずいう理由だけで、関数で同じものを曞くこずができるか、通垞の関数でself



を䜿甚するこずができるかどうか考えたした。 なぜstaticmethodコンストラクトが必芁なのですか



私は質問をグヌグルで怜玢したしたが、りサギの穎のように深いこずがわかりたした。 staticmethodが奜たれおいないプログラミング蚀語は他にもたくさんありたす。 そしお、理性的-staticmethodはオブゞェクトモデルを砎壊したす。 その結果、 staticmethodはここではないこずに気付きたした。 さお、staticmethodデコレヌタを䜿甚するず、リンタヌは「いいえ、ごめんなさい、リファクタリング」ず蚀いたす。



ほずんどの開発者は私に反察したすが、玄半数はただstaticmethodの代わりに通垞のメ゜ッドたたは通垞の関数を曞く方が良いず考えおいたす。



__initのロゞック__。Ru-良いか悪いか



これは私のお気に入りのトピックです。 確かに、新しいパッケヌゞを䜜成しお䜕らかの方法で呌び出すず、__ init __。Ruが䜜成され、䜕を入れるのか疑問に思うでしょうか __init __。Ruに䜕を入れるか、そしお䜕を-ファむルを䞊べお 私にずっお、これは些现な質問ではなく、私はい぀も迷っおいたした。おそらく最も重芁なこずでしょうか それから私は考えた-いいえ、反察に、私は最も理解可胜な文脈で最も重芁なものを眮くでしょう。 __init __。Ruに䜕かを入れお、それをすべおむンポヌトするず、埪環むンポヌトも悪いこずがわかりたす。



私はさたざたな人気のあるラむブラリを芋お、それらの__init __。Ruを登り、基本的にはガベヌゞ互換性たたは埌方互換性があるこずに気付きたした。 私にずっお、この質問は、倚くのサブパッケヌゞを含む倧きなパッケヌゞを䜜成し始めたずきに急激に発生したした-あなたは迷子になりたす。 , . Python, , , __init__. , 90% .



— , API, , - , , ? , , . API . , __init__. - : , , .



, I_CONTROL_CODE



— . , . , , __init__. — . , , , - , .



hasattr ?



hasattr ? , , Python — . hasattr , ().



, , hasattr , , . , hasattr, , . - , Python -, hasattr . , . getattr « , ». hasattr — getattr, exception .



50 50 — , , .







, layer-linter . 圌は䜕をしおいたすか : , , , . , - . - . .



cohesion . , . Cohesion , . False Positive , — , , .



vulture Python . - , Python , . ohesion.



Radon , : Halstead , Maintainability Index , . , — .



Final type



Final- Python. Typing Extensions, , . , - , — , . , - - , ? 必芁ありたせん。 . - — , , , .



Gratis



, .







, .



, . , . , Python- , .



, Moscow Python Conf++ , . , , Python-.


. . , , , .




















All Articles