Python - Classe e oggetto [chiuso]

-1

Ho una domanda che mi disturba molto e penso che potrebbe essere di grande aiuto se avessi una risposta. Quindi ho capito:

class Klasse1:
    variable1 = "haha"
class Klasse2:
    variable2 = "hoho"

print Klasse1.variable1
print Klasse2.variable2

e questo:

class Klasse1:
    variable1 = "haha"
class Klasse2:
    variable2 = "hoho"

Object1 = Klasse1()
Object2 = Klasse2()
print Object1.variable1
print Object2.variable2

Ora la domanda è: perché dovrei usare il secondo (troppo codice) invece del primo (ovviamente più semplice). In molti siti e tutorial ho visto persone creare oggetti per qualcosa che potevano facilmente ottenere senza crearli. Quindi probabilmente mi manca qualcosa e mi piacerebbe sapere.

P.S. Lo stesso caso con Java

    
posta M-Reda Daoudi 04.11.2015 - 17:47
fonte

3 risposte

1

Nel tuo piccolo esempio non fa differenza tra il primo e il secondo esempio. O va bene.

La differenza diventa importante con esempi del mondo reale, come quando vuoi avere più istanze di una classe. Ad esempio, considera un gioco. Se sei un gioco per giocatore singolo, il tuo primo esempio va bene. Crea la classe e fai riferimento ai valori direttamente nella classe.

Tuttavia, che cosa fai quando hai una partita multiplayer e variable1 rappresenta il punteggio del giocatore? Puoi creare una classe Player1 e una classe Player2 e il tuo primo esempio continua a funzionare. Ora cosa fai se oltre al punteggio hai 100 altri attributi? Hai due classi identiche che sono definite esattamente uguali? Cosa succede se vuoi supportare 100 giocatori? O 1000? Crei 1000 classi identiche, che differiscono solo dal nome della classe?

Questo è il motivo per cui le classi sono così potenti: si definisce la classe esattamente una volta, e quindi è possibile creare tutte le istanze di quella classe che si desidera. Sia che tu abbia un giocatore o 1000, devi solo definire la classe giocatore una volta, eppure ogni classe ha i propri dati 1

Quindi, per semplici esempi, perché passare alla difficoltà di creare istanze? Il motivo è che costruisce buone abitudini. Se prendi l'abitudine di creare classi e istanziarle, quando arriva il momento di fare un'applicazione più complessa non dovrai cambiare il tuo modo di lavorare.

Bottom line: per qualsiasi definizione non banale di un oggetto, il tuo codice sarà molto più facile da mantenere se hai una singola classe con più istanze.

1 se utilizziamo letteralmente il tuo codice di esempio, ogni giocatore condividerà lo stesso punteggio. Tuttavia, se crei classi con attributi di istanza piuttosto che attributi di classe, ogni giocatore otterrà il proprio punteggio.

    
risposta data 04.11.2015 - 20:46
fonte
2

Pensa alle classi come cookie cutter e oggetti come cookie.

Ogni cookie ha la stessa forma; quello del taglia-biscotti. Ma ogni cookie potrebbe avere un colore diverso: color = "green"

Lo faresti nel secondo modo perché non immagineresti mai di cuocere un singolo biscotto durante tutta la tua vita, né tutti i cookie che infornerai saranno verdi.

    
risposta data 04.11.2015 - 17:53
fonte
0

Why would I use the second(too much code) instead of the first(obviously easier.)

Solo così siamo chiari, presumo tu sappia la differenza tra classe e variabile di istanza . Se lo fai, sai che non ha senso creare un'istanza di una classe solo per accedere (leggi / scrivi) a una variabile di classe. Sarebbe assurdo.

Quindi ho intenzione di reinterpretare la domanda in questo modo:

If I have an instance Object1 of class Klasse1 and I wish to access a class variable variable1, should I use Klasse1.variable1 or Object1.variable1?

Tecnicamente entrambi sono corretti.

IMHO tu devi utilizzare Klasse1.variable1 come una questione di convenzione (anche quando hai un'istanza di Klasse1 a portata di mano). È un codice più pulito; indica al lettore che stai accedendo a una variabile di classe e non a una variabile di istanza.

    
risposta data 04.11.2015 - 18:40
fonte

Leggi altre domande sui tag