クラスに属性やメソッドを動的に追加させる必要がある場合があります。たとえば、プラグインを作成するときにこのメソッドを使用できます。設定ファイルを使用してロードする必要があるモジュールを指定し、ビジネスの拡張に応じて必要なモジュールを追加できます。
この記事では、Python でクラスの属性またはメンバー関数を動的に追加するためのソリューションを簡単に説明します。具体的な方法は次のとおりです。
まず、ulipad: mixin の実装を参照します。ここで行われることは比較的単純です。クラスを宣言し、クラスが初期化されるときに構成ファイルを読み取り、構成リストに従って特定のディレクトリ内のモジュールの下にある関数をロードします。関数は、モジュールを作成し、この関数をクラス関数のメンバーとして動的にロードします。
コードは次のとおりです:
class WinBAS(Bas): def __init__(self): self.__baslist = {} self.__Init_Modules() pass def __Init_Modules(self): import modplugs for m in modplugs.__moduleset__: mh = __import__('modules.' + m)# + '.' + m) ma = getattr(mh, m)# + '.' + m) ma = getattr(ma, m) setattr(self.__class__, m, ma)
__moduleset__ = [ 'BAS_GetUserList', ]
def BAS_GetUserList(self, strs): return [0, strs]