Punto istance?

Stato
Discussione chiusa ad ulteriori risposte.

imported_FireSkull

Utente Silver
1 Aprile 2010
6
1
0
54
Ciao ragazzi, da poco ho iniziato a studiare le classi, e mi sono inbattuto in un problema.
Io non ho capito anche perchè quando stampo P1 mi esce scritto <__main__.Punto instance at 0x8e9e90c>.Ora vi illustro:
Codice:
>>> class Punto:
	pass

>>> P1 = Punto()
>>> P1.x = 3.0
>>> P1.y = 4.0
>>> print '('+str(P1.x)+','+str(P1.y)+')'
(3.0,4.0)
>>> DistanzaQuadrato= P1.x*P1.x+P1.y*P1.y
>>> print P1
<__main__.Punto instance at 0x8e9e90c>
Qualcuno me lo sa spiegare?
 
per P1 è un punto.

nella definizione della classe, aggiungi un
Codice:
def __str__(self):
    return '('+str(self.x)+','+str(self.y)+')'

o qualcosa del genere. Se non funziona, al posto di __str__ metti __repr__

Cmq non è assolutamente bene creare una classe vuota (pass), ed inserire gli attributi così

Codice:
class Punto:
    x = 0
    y = 0
    def __init__(self,x,y):
        self.x = x
        self.y = y
è molto meglio (poi se vuoi printare ci aggiungi la funzione di prima).

Poi, ti basterà fare così:
Codice:
P1 = Punto(3.0,4.0)
 
Posso fare una domanda? Ho studiato poco python, ma essendo abituato all'OOP avrei fatto come ha fatto malex per via dell'incapsulamento e le altre cose... ma se io faccio girare il sorgente di FireSkull e quindi creo la classe vuota, da quello che ho capito, con "pass", poi l'interprete aggiunge componenti alla classe mano mano che trova le definizioni?
 
in pratica, anche se io prendo e faccio
Codice:
class Gay:
    def __init__(self,mex):
        self.mex = mex +" <3 Bronsa"

la classe in se funzione perfettamente. Poi istanzio due oggetti, ad esempio:
Codice:
Malex = Gay("Malex")
shura = Gay("shura")

ho quindi due oggetti differenti. Ora, volendo posso accedere direttamente a mex
Codice:
print Malex.mex
print shura.mex

posso farne quello che voglio. Tuttavia un oggetto può anche avere ulteriori attributi aggiunti in seguito
Codice:
Malex.language = "Python"

Può essere visto come un dizionario alla fin fine, noi aggiungiamo semplicemente 'chiavi' e 'valori' a questo array associativo.

pass in pratica serve per quei blocchi che sono vuoti, ma python visto che interpreta i blocchi tramite l'identazione, necessita di qualcosa. pass è come un nop per assembly etc
 
Stato
Discussione chiusa ad ulteriori risposte.