Sono sicuro che ci sia un paradigma di programmazione per coprire questo caso, ma non riesco a trovare la dicitura corretta per questo, e quindi il mio Google-fu è inutile.
Ho una classe chiamata SimpleWorld
che ha metodi, e all'interno di quei metodi, alla classe piace istanziare gli oggetti. Ora tutti questi oggetti istanziati eseguono la sottoclasse di una particolare superclasse che fornisce loro una proprietà chiamata world
. Tuttavia, all'interno del mio SimpleWorld
, il mondo è sempre un valore particolare.
class WorldBeing:
def __init__(self, world):
self.world = world
class Animal(WorldBeing):
pass
class Player(WorldBeing):
pass
class SimpleWorld:
def __init__(self):
self.world = []
def add_player(self):
self.world.append(Player(self.world))
def add_two_animals(self):
self.world.append(Animal(self.world))
self.world.append(Animal(self.world))
Come posso strutturarlo meglio, in modo che self.world
non debba continuare a essere ripetuto per tutti questi animali e giocatori?
Infatti, per ogni WorldBeing
in SimpleWorld
, il mondo di quell'essere sarà sempre il mondo del mondo semplice. Quindi, se dovessi creare un altro tipo class Plant(WorldBeing)
, ogni volta che SimpleWorld
ha istanziato un impianto, anche quell'impianto avrebbe sempre preso lo stesso parametro world
per essere istanziato.
Questo problema può essere risolto con un particolare paradigma di programmazione? In tal caso, come viene chiamato quel paradigma e come lo implementerei in Python?
Se non esiste un paradigma particolare, quale sarebbe il modo migliore per semplificare il SimpleWorld
in non sempre è necessario specificare tale parametro per ogni nuovo oggetto?
(Idealmente, mi piacerebbe presumere che possiamo modificare solo SimpleWorld
, ma sono disposto ad accettare anche le modifiche alle altre classi se davvero aiuta la struttura.)
Ciò che ho considerato finora:
Ho preso in considerazione di provare a definire nuove classi all'interno di SimpleWorld
(come SimpleWorldAnimal
), ma sembra noioso creare una nuova classe interna per ciascuna esterna (ed è anche difficile definire nuove classi che usano% SimpleWorld
diself.world
nella loro __init__
e ancora li hanno definiti al di fuori SimpleWorld
's __init__
). Spero davvero che non sia la soluzione migliore.
Ho anche esaminato le classi dinamiche, ma non riesco a pensare a un buon modo di usarle ancora.