私は Python は初めてですが、趣味でプログラムを書いているので、OOP とコンピューター プログラミング全般についてある程度の知識があります。私は単純な動物シミュレーターに取り組み始めました。異教徒の動きかもしれませんが、動物のすべての「アクション関数」を辞書に保存して、各関数に文字列でアクセスできるようにしようとしています。たとえばdict['SLEEP']()
、sleep 関数を呼び出します。
私が達成しようとしていることの例を見つけることができませんでした.率直に言って、私の問題を知的に説明する方法がわかりません. 以下の必要最小限のコードを参照してください。
class Animal:
def __init__(self):
self.health = 100
self.actions = {} # dictionary of functions
self.initializeAnimal()
def initializeAnimal(self):
self.actions['SLEEP'] = self.initializeSleep() # add sleep function
def initializeSleep(self):
RESTORED_HEALTH = 20
# other constants
def sleep(self):
self.health += RESTORED_HEALTH
# utilize other constants
return sleep
次に、動物ハンドラーは次の行に沿って何かを実行します。
for animal in animalList:
animal.actions['SLEEP']()
もちろん、sleep 関数が呼び出されたときに動物の健康が 20 増加することを望みます。代わりに、何も起こりません。いくつかの調査と実験の後self
、関数に渡されたものはsleep()
明らかinitializeSleep()
に動物クラスではなく参照されていることがわかりました。
この方法で関数を呼び出すときに、動物の健康状態をどのように変更するかについて、私はやや途方に暮れています。どうにかしてスーパークラスの呼び出しを利用する必要がありますか?
編集:構文を明確にする