Cosa fare se alcuni parametri diventano costanti all'interno di una particolare classe

1

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.

    
posta Pro Q 14.09.2018 - 08:39
fonte

1 risposta

2

Penso che potresti essere in errore nel tuo problema. Perché è un oggetto nel mondo di lavoro sapere che mondo è? Mi sembra che dovrebbe essere il lavoro del mondo sapere quali oggetti ci sono dentro.

Ad esempio, un animale in cerca di un altro animale potrebbe dire: "Mondo, trovami qualcuno con cui parlare!" E il mondo avrebbe risposto "sì, c'è un altro animale accanto a te"

In alternativa. L'animale può vedere un altro animale accanto e chiedere al mondo "è qualcosa con cui posso interagire". Concretamente, se un animale rilevasse un altro animale in qualche modo, guarderebbe l'altro animale e verificherà con il mondo se condividono lo stesso mondo.

Potresti anche limitare il rilevamento solo ad altri animali all'interno dello stesso mondo. Quindi un animale potrebbe interagire solo con le cose nel suo stesso mondo e non deve mai preoccuparsi del fatto che esistono altri mondi. Questa sembra la soluzione più pulita.

Gli oggetti nel mondo dovrebbero preoccuparsi delle proprie funzionalità e delle proprie funzionalità.

Modifica: solo per aggiungere un po 'di esempi concreti.

Quando installi un nuovo animale ...

Animal a1 = new Animal()
world1.add(a1)

Animal a2 = new Animal()
world3.add(a2)

Spero che sia più chiaro.

    
risposta data 17.09.2018 - 06:38
fonte

Leggi altre domande sui tag