2017-01-09 24 views
-1

さまざまなサブモジュールからクラスを初期化できるプログラムを作成しようとしています。将来、モジュールの拡張を容易にするために、コンストラクタ関数といくつかのキー関数を辞書に格納したいと考えています。私は属性として認識されていない関数の問題を取得しており、これをどのように修正するかは特定できません。コンストラクタにとってはうまくいくようです。 my_class.pyインサイド辞書をPythonで辞書に保存

import my_class 
class_ctor = {"my_class":my_class.my_class, ...} 
class_func = {"my_class":my_class.my_class.func, ...} 

my_inst = class_ctor["my_class"](what,ever,arguments) 
my_inst.class_func["my_class"](some,other,arguments) 

class my_class: 
    def __init__(self): 
     ... 
    def func(...): 
     ... 

私はこのような何かを達成できる方法はありますコードは次のようになりますか?私は同様の方法で動作するディスパッチャを持ついくつかの例を見てきましたが、これをメソッドに抽象化したいと思います。

ご協力いただきありがとうございます。

+0

何が問題なのですか? –

+1

これをすべて行う必要はありません。クラスを拡張したい場合は、親クラスを子クラスとして継承することができます –

+0

プログラムを実行すると、「my_classにはfuncという属性はありません」と表示されます。 私はクラスを継承しようとしていません。私はプログラムの主要な部分を持っています。これは、ユーザーが実行したいと思っているさまざまなクラスから関数を呼び出すディスパッチャのようなものです。 – Grimey

答えて

2

問題は、この行です:

my_inst.class_func["my_class"](some,other,arguments) 

class_funcは(あなたが示されたものから)my_instに属していません。

+3

ええ、それは 'class_func ['my_class'](my_inst、some、other、arguments)' –

+0

にする必要があると思います。私はこのメソッドがモジュール内のクラスに属していると言っていました。一定。 それはできない場合があります。もう1つのオプションは、モジュール内でクラスのインスタンスをパラメータとして受け取り、続いて関数を呼び出す関数をモジュール内に持つことです。 – Grimey

+0

@ juanpa.arrivillagaはまさに正しいです。 –