私はpythonクラスを実装しています。このクラスは、渡されたパラメータに基づいて型が決定されるコンストラクタ内に別のオブジェクトを構築します。たとえば、"workerA"
のコードでは、クラス"MyAClass"
と"workerB"
の動作があります。オブジェクトの動作は"MyBClass"
です。コンストラクタに渡されるパラメータに基づいてPythonクラスを実装します
BaseClassが既に変更されていない別のコードで使用されているため、このメソッドを別のクラスをベースクラスから派生させる代わりに使用しています。だから、私が"MyBClass"
の振る舞いについてBaseClassの別の振る舞いをしたいのであれば、それにパラメータdbtype = "MyBClass"
を渡す必要があります。
同じ結果が得られるより良い方法はありますか?
import sys
# MyAClass definition
class MyAClass :
def __init__(self, serverSettings):
self._serverSettings = serverSettings
def initialize(self):
self._init = 1;
print("Calling", sys._getframe(1).f_code.co_name)
def add(self):
self._init = 2;
print("Calling", sys._getframe(1).f_code.co_name)
def finalize(self):
self._init = 3;
print("Calling", sys._getframe(1).f_code.co_name)
def __del__(self):
print('Calling destructor of class ', self.__class__.__name__)
# MyBClass definition
class MyBClass :
def __init__(self, serverSettings):
self._serverSettings = serverSettings
def initialize(self):
self._init = 1;
print("Calling", sys._getframe(1).f_code.co_name)
def add(self):
self._init = 2;
print("Calling", sys._getframe(1).f_code.co_name)
def finalize(self):
self._init = 3;
print("Calling", sys._getframe(1).f_code.co_name)
def __del__(self):
print('Calling destructor of class ', self.__class__.__name__)
# The base class which will be called in main program
class BaseClass :
def __init__(self, serverSettings, dbtype = None):
if(dbtype == None):
self.__worker = MyAClass(serverSettings)
elif(dbtype == "MyBClass") :
self.__worker = MyBClass(serverSettings)
else :
print("Undefined type")
def initialize(self):
self.__worker.initialize()
def add(self):
self.__worker.add()
def finalize(self):
self.__worker.finalize()
if __name__ == "__main__":
serverSettings = dict()
serverSettings["address"] = "localhost"
serverSettings["name"] = "Testname"
workerA = BaseClass(serverSettings)
workerA.add()
workerB = BaseClass(serverSettings, dbtype = "MyBClass")
workerB.finalize()
に基づいて、次のコード変更をした、あなたは可能性がありちょうど適切なクラスを使用してください。 –
@ Kluas D、クラスを渡す方法を試してみました。私には、私が実装したものよりも良い方法のように思えました。ありがとう – Gourish