Está en la página 1de 18

import math

class Circulo:
def __init__(self,x):
if x<=0: exit("radio<=0)
self.r=x
def perimetro(self): return 2*math.pi*self.r
def area(self): return math.pi*self.r**2
class Cuadrado:
def __init__(self,x):
if x<=0: exit(lado<=0)
self.a=x
def perimetro(self): return 4*self.a
def area(self): return self.a**2
Nota. Constructores son similares

Solucin 2. Con Herencia


import math
class Figura:
def __init__(self,x): #constructor nico
if x<=0: exit(n<=0")
self.x=x #significado de x depende de figura
class Circulo(Figura):
def area(self): return math.pi*self.x**2
def perimetro(self): return 2*math.pi*self.x
class Cuadrado(Figura):
def area(self): return self.x**2
def perimetro(self): return 4*self.x

Otras figuras?
class Rectangulo(Figura):
def __init__(self,x,y):
#constructor
Figura.__init__(self,x) #ctor clase Figura
self.y=y #ancho
if y<=0: exit(n<=0")
def area(self):
return self.x*self.y
def perimetro(self):
return 2*(self.x+self.y)
Uso?
r=Rectangulo(n,n)

class Triangulo(Figura):
def __init__(self,x,y,z):
if x<=0 or y<=0 or z<=0 \ #continua
or x+y<=z or x+z<=y or y+z<=x:
exit("no forman triangulo")
self.x=x; self.y=y; self.z=z
def perimetro(self):
return self.x+self.y+self.z
def area(self):
s=(self.x+self.y+self.z)/2;
return math.sqrt(s*(s-self.x)*(s-self.y)*(s-self.z))
Uso? t=Triangulo(n,n,n)

r=raw_input(circulo,cuadrado,rectangulo o + \

triangulo?").lower()
if r=="circulo":
f=Circulo(input("radio?"))
elif r=="cuadrado":
f=Cuadrado(input("lado?"))
elif r=="rectangulo":
f=Rectangulo(input("largo?"),\
input("ancho?"))
elif r=="triangulo":
f=Triangulo(input("lado1?"),\
input("lado2?"),\
input("lado3?"))
else:
exit("figura incorrecta")
print "area=",f.area()
print "perimetro=",f.perimetro()

Herencia transitiva (sucesiva)


class A:
def __init__(self,x):
self.a=x
def f(self): return self.a
class B(A): #hereda de A
def __init__(self,x,y):
A.__init__(self,x)
self.b=y
def g(self): return self.b
class C(B): #hereda de B
def __init__(self,x,y,z):
B.__init__(self,x,y)
self.c=z
def h(self): return self.c
Uso?
>>>c=C(1,2,3)
>>>c.f()+c.g()+c.h()
6

B
C

Herencia mltiple
class A:
A
B
def __init__(self,x):
self.a=x #una variable
def f(self): return self.a
C
class B:
def __init__(self,x):
self.b=x #una variable
def g(self): return self.b
class C(A,B): #C hereda de clases A y B
def __init__(self,x,y,z):
A.__init__(self,x)
B.__init__(self,y)
self.c=z #tres variables pq a y b se heredan
def h(self): return self.c
Uso?
>>>c=C(1,2,3)
>>>c.f()+c.g()+c.h()
6

Solucin 1. Con clases independientes


import math
class Esfera:
def __init__(self,x):
if x<=0: exit("radio<=0")
self.r=x
def area(self):
return 4*math.pi*self.r**2
def volumen(self):
return 4.0/3.0*math.pi*self.r**3
class Cubo:
def __init__(self,x):
if x<=0:exit("lado<=0")
self.a=x
def area(self):
return 6*self.a**2
def volumen(self):
return self.a**3

Solucin 2. Con Herencia


import math
class Cuerpo:
def __init__(self,x):
if x<=0: exit(n<=0")
self.x=x
class Esfera(Cuerpo):
def area(self):
return 4*math.pi*self.x**2
def volumen(self):
return 4.0/3.0*math.pi*self.x**3
class Cubo(Cuerpo):
def area(self):
return 6*self.x**2
def volumen(self):
return self.x**3

Uso de archivos
Convencin: cada clase en un archivo con nombre de la clase
#archivo Cuerpo.py
import math
class Cuerpo:
def __init__(self,x):
if x<=0: exit(n<=0")
self.x=x

#archivo Esfera.py
from Cuerpo import Cuerpo
#desde archivo importe clase
class Esfera(Cuerpo):
def area(self):
return 4*math.pi*self.x**2
def volumen(self):
return 4.0/3.0*math.px*self.x**3
#archivo Cubo.py
from Cuerpo import Cuerpo
class Cubo(Cuerpo):
def area(self):
return 6*self.x**2
def volumen(self):
return self.x**3

#archivo nombre.py
from Esfera import Esfera
from Cubo import Cubo
r=raw_input(esfera o cubo?).lower()
if r=="esfera":
cuerpo=Esfera(input("radio?"))
elif r=="cubo":
cuerpo=Cubo(input("lado?"))
else:
exit("error")
print "area=",cuerpo.area()
print "volumen=",cuerpo.perimetro()

También podría gustarte