All pastes #366245 Raw Edit

Triangolo.py

public python v1 · immutable
#366245 ·published 2007-02-21 16:33 UTC
rendered paste body
# TRAINGOLO.PY# by Lorenzo (http://lorenzox.wordpress.com)# Un programmino che propone esempi funzionanti affiancati a commenti esplicativi# sul concetto, funzionamento e caratteristiche di base di classi e oggetti.# Puo' essere riutilizzato, ridistribuito e modificato a piacimento, senza nessuna restrizione.# Ringrazio gli autori di "How to think like a computer scientist: learning with Python",# per l'ottimo libro e gli spunti presi per creare questo file. # Creo un nuovo TIPO di dato composto (o una nuova CLASSE): Triangoloclass Triangolo:  pass  # Creo un nuovo OGGETTO di TIPO Triangolo (ovvero un'ISTANZA della CLASSE Triangolo)t1 = Triangolo()# Assegno all'ATTRIBUTO Altezza dell'OGGETTO t (di tipo Triangolo), un valoret1.Altezza = 10# Assegno all'ATTRIBUTO Base dell'OGGETTO t (di tipo Triangolo), un valoret1.Base = 22# Calcolo l'area del triangolo (a mano :)) e la scrivoprint "Area di t1 =", (t1.Base*t1.Altezza)/2# Creo un'altro OGGETTO (ISTANZA) della CLASSE Triangolot2 = Triangolo()# Assegno agli ATTRIBUTI Altezza e Base di t2, gli stessi valori dei due ATTRIBUTI di t1t2.Altezza, t2.Base = t1.Altezza, t1.Base# I due OGGETTI di tipo Triangolo (o istanze della CLASSE Triangolo) saranno uguali?if t1 == t2:  print "I due OGGETTI (t1 e t2) sono uguali!"else:  print "I due OGGETTI (t1 e t2) sono diversi."  # Faccio la stessa cosa con i loro ATTRIBUTI (Altezza e Base). Saranno uguali?if (t1.Altezza == t2.Altezza) and (t1.Base == t2.Base):  print "Gli ATTRIBUTI di t1 sono uguali agli ATTRIBUTI di t2!"else:  print "Gli ATTRIBUTI di t1 sono diversi dagli ATTRIBUTI di t2."  # Importo il modulo copy, per copiare degli OGGETTI (e il relativo contenuto)# *NOTA: non e' molto elegante importare un modulo a meta' programma ;)import copy# Copio l'OGGETTO di TIPO Triangolo t1, in un'altro OGGETTO: copia_t1copia_t1 = copy.copy(t1)# L'OGGETTO t1 e l'OGGETTO copia_t1 saranno uguali?if t1 == copia_t1:  print "I due OGGETTI (t1 e copia_t1) sono uguali!"else:  print "I due OGGETTI (t1 e copia_t1) sono diversi :("  # Creo un'alias all'OGGETTO t2, in copia_t2copia_t2 = t2# Questi saranno uguali?if t2 == copia_t2:  print "I due OGGETTI (t2 e copia_t2) sono uguali!"else:  print "I due OGGETTI (t2 e copia_t2) sono diversi"  # Creo un nuovo tipo di dato (o una nuova CLASSE): Punto# (inteso come punto in un piano cartesiano: (x, y))# *Note: non  molto elegante creare una CLASSE in mezzo al programma ;)class Punto:  pass  # Assegno all'ATTRIBUTO Angolo1 dell'OGGETTO di tipo Triangolo t1, un OGGETTO di tipo Puntot1.Angolo1 = Punto()# Ora posso assegnare all'OGGETTO dell'ATTRIBUTO Angolo1, dei valori x e y (le coordinate del punto)t1.Angolo1.x = 12t1.Angolo1.y = 5.3# In conclusione, abbiamo ottenuto tre OGGETTI di tipo triangolo (t1, t2 e copia_t1),# un alias ad un OGGETTO (copia_t2), due ATTRIBUTI per ognuno (Base e Altezza), un ATTRIBUTO dell'OGGETTO t1, # contenente un'OGGETTO, contenente a sua volta 2 ATTRIBUTI (Angolo1, x, y).# Schematizzato:##[	] ---> Base#[  t1	] ---> 	Altezza#[	] --->	[	] ---> x#		[Angolo1]#		[	] ---> y#		#[	] ---> Base#[  t2	]#[	] ---> Altezza#[		] ---> Base#[   copia_t1	]#[		] ---> Altezza## copia_t1 e' stato creato prima di aggiungere l'ATTRIBUTO Angolo1 a t1, quindi esso e' la copia di t1 all'inizio.# In ogni caso, il metodo copy non avrebbe pienamente funzionato, perch non avrebbe copiato l'OGGETTO contenuto# nell'ATTRIBUTO Angolo1. Per copiare TUTTO (in questo caso) occorrerebbe il metodo deepcopy del modulo copy.##[		]	[	]#[   copia_t2	] --->	[   t2	]#[		]	[	]