- 環境
- Python 3.4.0
globals() でグローバルシンボルテーブルを取得できますが、このテーブルにクラス名をキー名として、 type() で作成したクラスを値とした項目を追加すると良いようです。
test.py をこんな感じで書いてみました。
#!/usr/bin/env python3
class BaseClass:
def print_message(self):
print(self.message)
def add_class():
dGlobals = globals()
dGlobals['DerivedClass'] = type(
'DerivedClass',
(BaseClass,),
{'message': 'Hello'}
)
def main():
add_class()
oDerivedClass = DerivedClass()
oDerivedClass.print_message()
if __name__ == '__main__':
main()
実行すると期待どおり Hello が表示されました。
$ ./test.py
Hello
クラスを動的に作成しているのは test.py の以下の部分です。
dGlobals = globals()
dGlobals['DerivedClass'] = type(
'DerivedClass',
(BaseClass,),
{'message': 'Hello'}
)
このコードは以下のようなクラス宣言と同等ということで良さそうです。
class DerivedClass(BaseClass):
message = 'Hello'
0 件のコメント:
コメントを投稿