私はモジュールにPythonクラスを持っていますが、同じモジュール内に他のクラスのリストが必要ないくつかのメソッドがあります。ここではどのように私は今それをやっているされていますPython:クラスが定義される前にモジュール内のクラスを見つけよう
module.py
class Main:
@staticmethod
def meth1():
for c in classes:
#do something
@staticmethod
def meth2():
for c in classes:
#do something
class Class1:
pass
class Class2:
pass
class Class3:
pass
classes = [Class1, Class3]
いくつかのことを私は改善したいと思います:
- 私はどこか
classes
リストを入れたいのですがより一般的です。理想的には、すべてのクラスの外側であるが、モジュールファイルの先頭、またはクラス属性がMain
であるが、meth1
またはmeth2
の外にある。その目的は、誰かが別のクラス定義を追加する必要がある場合、見つけやすくすることです。 - 可能であれば、これをプログラムで実行したいので、まずはリストを明示的に定義する必要はありません。これは#1の必要性を排除します(ただし、私はまだ普及していたいと思いますが)。これを行うには、同じモジュール内で定義されたすべてのクラスをリストする方法が必要です。私が最も近かったのは
dir()
またはlocals()
ですが、インポートされたクラス、メソッド、およびモジュールもリストされています。また、私が欲しいクラスを特定するには何らかの方法が必要です。私はクラスの属性だけでそれを行うことができますが、もっとエレガントなやり方があればいいでしょう。
私も可能なことをしようとしていますか?
あなたの例では、モジュール内の2つのクラスを対象としたが、その後、あなたがプログラムでそれをやりたいと言います。それがどのように働くと思いますか? – 7stud
@ 7stud私はいくつかのクラスを追加することができますが、そのうちのいくつかはターゲットにされていますが、クラスのいくつかの機能に基づいてそれをターゲットにするかどうかを決定することができます。 [ここに例があります](http://pastebin.com/ALd0YdcU)問題は1です。私は 'get_all_local_classes()'を知る方法がわかりません。2.すべてのクラスに 'is_a_target()'メソッドを定義させるよりも、フィルタリングする方がいいです。 – ewok
@ 7stud上記の例ではフィルタを行う方法がありません。私はそれについての提案を探しています – ewok