渡した文字列に基づいて、クラス内の関数を呼び出そうとしています。
このリンクの手順に従ってみました: Pythonで関数の名前を持つ文字列からモジュールの関数を呼び出す
これが私のコードです:
methodNameString = "add" + typeOfShip
methodToCall = getattr(listOfPlayerFleets[currentPlayer], methodNameString)
listOfPlayerFleets[currentPlayer].methodToCall(num)
エラーが発生します:
AttributeError:fleet instance has no attribute 'methodToCall'
methodToCallに正しいメソッド名が割り当てられない理由について何か考えはありますか?
私も試しました
methodToCall = getattr(fleet, methodToCall)
次に、次のメッセージが表示されます。
AttributeError: 'module' object has no attribute 'addCruiser'
getattrが私のクラスで私のメソッドを見つけることができないかのようです。
listOfPlayerFleetsは、フリートオブジェクトのリストです
これは、メソッドが実際に存在することを確認できるフリートオブジェクトの外観です。
class fleet:
""" Stores Fleet Numbers, Represents a fleet """
ships = {'fighters':0, 'cruisers':0, 'capitols':0}
attacking = False
defending = False
def __init__(self):
self.ships = {'fighters':0, 'cruisers':0, 'capitols':0}
self.attacking = False
self.defending = False
#add a Fighter
def addFighter(self, numOfFighters):
self.ships['fighters'] = numOfFighters
#add a Cruiser
def addCruiser(self, numOfCruisers):
self.ships['cruisers'] = numOfCruisers
#add a Capitol Ship
def addCapitol(self, numOfCapitols):
self.ships['capitols'] = numOfCapitols