Denominazione della classe Python: classi nidificate o nomi composti?

1

Ho riscontrato uno scenario in cui non riesco a decidere quale sia la migliore (o peggiore) strategia di denominazione. Il contesto è il seguente: una parentesi (come in un torneo) costituita da nodi, dove il nodo è costituito da due elementi astratti che possono essere un giocatore con seme, un bye o un riferimento a un altro nodo.

Vediamo chiaramente una gerarchia di inclusione, concettualmente parlando:

Bracket > Node > Element = Seed, Bye, Reference

Non riesco a decidere se nominarli con nomi composti e dichiarare ogni classe allo stesso livello (nessun nidificazione):

class Bracket:
    pass

class BracketNode:
    pass

class BracketNodeElement:
    pass

class BracketNodeElementSeed(BracketNodeElement):
    pass

class BracketNodeElementBye(BracketNodeElement):
    pass

class BracketNodeElementReference(BracketNodeElement):
    pass

Oppure puoi essere un po 'più ASCIUTTO con i nomi, ma rendendo il nome probabilmente più brutto:

class Bracket:
    class Node:
        class Element:
           pass

        class Seed(Element):
           pass

        class Bye(Element):
           pass

        class Reference(Element):
           pass

L'accesso a un seme o a un ciao deve essere espresso in questo modo: Bracket.Node.Seed e Bracket.Node.Bye .

Qual è la solita strada da percorrere?

    
posta dabadaba 30.06.2017 - 13:19
fonte

1 risposta

4

Opzione C: più semplice è meglio. Rendi ogni classe a livello globale e rimuovi il prefisso:

class Bracket:
    pass

class Node:
    pass

class Element:
    pass

class Seed(Element):
    pass

class Bye(Element):
    pass

class Reference(Element):
    pass

Il fatto che esistano tutti in un modulo ti dà il namespace di cui hai bisogno senza dover avere nomi di classe grandi e ingombranti. Ad esempio, supponendo che tu li abbia messi in un file chiamato tournament.py , allora da qualsiasi altra parte useresti tournament.Bracket , tournament.Node , ecc.

    
risposta data 30.06.2017 - 14:34
fonte

Leggi altre domande sui tag