クラスの本体内では、クラス名がまだ定義されていないため、使用できません。単純にクラスの名前を入力できませんか?たぶん、あなたが解決策を見つけられるように、問題の詳細を述べる必要があります。
この作業を行うメタクラスを作成します。これはクラス作成時に呼び出され(概念的にはクラスの最後のブロック:ブロック)、作成されるクラスを操作できます。
cls_name = self.__class__.__name__
EDIT:Ned Batcheler
で言ったように
、これは動作しないでしょうあなたはクラスのプライベート属性でアクセスすることができます
class InputAssigningMetaclass(type):
def __new__(cls, name, bases, attrs):
cls.input = get_input(name)
return super(MyType, cls).__new__(cls, name, bases, newattrs)
class MyBaseFoo(object):
__metaclass__ = InputAssigningMetaclass
class foo(MyBaseFoo):
# etc, no need to create 'input'
class foo2(MyBaseFoo):
# etc, no need to create 'input'
私がやろうとしています何を明確にするために:私は**メソッドの「入力」、**外、クラス変数を作成し、初期化する必要があります。小さなクラスがたくさんあり、クラス名をパラメータとして使って 'get_input'を呼び出さなければなりません。私はこれを一般化しようとしているので、各クラスに行く必要はありません(100程度あります)、クラス名を入力してください。 –
OK、メタクラスを使用して回答を更新しました。 –
'InputAssigningMetaclass'の' super'行にある 'MyType'は何を指していますか? –