Devo prenderli come argomenti o definirli in una sottoclasse?

3

Quindi sto creando un clone mario in pygame e ho un personaggio di classe base e due sottoclassi, Mario e Luigi. I metodi che la classe Character definisce richiedono una quantità significativa di attributi da una sottoclasse (circa 20) da definire. Ad esempio, la velocità y iniziale dell'istanza Character deve essere definita. Devo passare tutti questi attributi alla classe Character come parametri o dovrei semplicemente averli definiti nella sottoclasse (per esempio Mario o Luigi)? O che dire di un mix? Il mio pensiero è che dal momento che queste proprietà sono tutte obbligatorie per un'istanza di caratteri, devono essere tutte passate come parametri nel costruttore della classe.

Ecco alcuni pseudo-codice per dimostrare cosa intendo:

class Mario(Character):

    def __init__(self):
        Character.__init__(self, 1, 2, 3, 4, 5, ... 20)

class Character:

    def __init__(self, var1, var2, var3, var4, var5, ... var20):
        pass

o

class Mario(Character):

    def __init__(self):
        var1 = 1
        var2 = 2
        var3 = 3
        var4 = 4
        ...
        var20 = 20
        Character.__init__(self)

class Character:

    def __init__(self):
        pass
    
posta Robbie 15.08.2015 - 05:41
fonte

1 risposta

4

Suggerirei di definire le proprietà comuni nella classe base e assegnarle semplicemente come tali nel costruttore per la classe figlia. Metterei anche dei controlli di integrità assicurandoti che le tue proprietà necessarie siano impostate prima di poter usare un determinato carattere sul tuo campo / mappa.

Non dovresti aver bisogno di passare tutte le proprietà al costruttore perché questo ridurrebbe la chiarezza nel tuo codice reale ... Vedere le proprietà delle impostazioni del costruttore definite nella base è probabilmente più chiaro, specialmente se non tutte deve essere impostato, o se ci sono proprietà aggiuntive.

    
risposta data 15.08.2015 - 07:49
fonte

Leggi altre domande sui tag