Python クラスの関数をアルファベット順に並べる
-
19-09-2019 - |
質問
警告、これは全くの怠惰なクエリです。プロジェクトが発展するにつれて、クラス内の関数の数も増加します。.py ファイルごとにいくつかのクラスもあります。そこで私がやりたいのは、関数名がアルファベット順に整理されるようにそれらを再ソートすることです [英国の皆さん、申し訳ありませんが、アルファベット順の 'z' についてはすでに大幅に妥協しています ;-)]。
たとえば現在:
class myClass():
stuff
def __init__():
do stuff
def b():
also do stuff
def c():
do other stuff
def a():
do even more stuff
..検索を容易にするために、次のように再配置したいと思います。
class myClass():
stuff
def __init__():
do stuff
def a():
do even more stuff
def b():
also do stuff
def c():
do other stuff
これは、関連する機能をより直感的に検索できるようになるためであり、単に見た目上の理由によるものです。明らかに維持したいと思います 初期化() などはクラスの先頭にあります。
今私は できる (まだ実行していませんが) Python スクリプトを使用してこれを実行します。このスクリプトは、クラスが存在する .py をテキスト ファイルとして読み取り、大量の文字列操作を実行します。しかし、これを行うより良い方法はないでしょうか?おそらくどこかに使えるツールがあるでしょうか?よく狩りましたが、使えそうなものは何も見つかりませんでした。
私は emacs を使用しているので、おそらく魔法を実行する 5 分間の大きなキーの組み合わせシーケンスがあるかもしれません (例えば)、しかし、Python モードでは何も表示されません。
最後に、クラス構造/docstring を視覚化して公開できる何らかの方法が必要です。
構造を視覚化するとは、たとえば、myClass.a() が myOtherClass.g() を呼び出す場所がリンクになるため、何が何を呼び出しているかをクラスごとに確認できることを意味します。クラスベース (つまり、myClass はどのような関数/クラスを使用しますか?) または全体 (ここには多数のファイルがありますが、それらはどのように「接続」されているのでしょうか?)
解決
あなたの質問に対する答えはありませんが、私には非常に強い意見があります。クラス内のメソッドの数が多すぎて見つけるのが困難な場合は、クラスをより小さなメソッドに分割するなどして、数を減らすことを検討する必要があります。
関数やメソッドに適用されるのと同じ凝集の原則がクラスにも適用されます。
他のヒント
メソッドを名前で並べ替えるのがそれほど素晴らしいアイデアかどうかはわかりません。
これは、OLE オブジェクトを参照するときに表示されるものですが、関連するメソッドが同じ文字で始まっていないためにあちこちにあるため、何も理解するのは非常に困難です。
たとえば、間に他の無関係なメソッドが存在しないように、「close」の直前に「open」を表示したいのですが...
あなたの問題は、クラス内の関数を簡単にリスト/表示することです?
これは私が emacs で使用する簡単なトリックです:
M-x が発生する
正規表現:^ *定義
試してみる ...(異なる正規表現を使用する他の言語でも同じことが機能します (例:"^サブ")