Esto me ayudará también a mí a corregir unas práctias en cuanto a la programación orientada a objetos y aprender nuevas prácticas.
Actualmente estoy usando una herramienta de una página web que permite evaluar la calidad de un código, este sitio se llama www.quantifiedcode.com.
Me he encontrado con errores en un desarrollo que por eso inicio esta serie de artículos.
En la siguiente figura verán como muestra los errores la herramienta:
Lo bueno es que al hacer un commit a github automáticamente quantifiedcode envía un correo con las incidencias.
Bueno, ahora toca ir al artículo en sí.
Se tiene una clase ciudad con varios métodos.
A continuación se muestra el código:
#!/usr/bin/env python3 from math import * #Se crea la clase ciudad que hereda de object. #Esto se declara asi actualmente por convencion. class Ciudad(object): #Datos cont_ciudad = 0 id_ciudad = 0 def __init__(self,nombre='',x=0,y=0): """Constructor que recibe el nombre de la ciudad,x y y""" self.nombre = nombre self.x = x self.y = y Ciudad.cont_ciudad += 1 self.id_ciudad = Ciudad.cont_ciudad def __str__(self): """Metodo que retorna un string con la info de la ciudad""" return 'Ciudad: ' + self.nombre + ',id= ' + str(self.id_ciudad) + ',x= %s,y=%s' %(self.x,self.y) def __set__( self, nombre): """Metodo que asigna un valor""" self.nombre= nombre def __get__( self): """Metodo que obtiene un valor""" return self.nombre def mover_a(self,x=0,y=0): """Metodo que cambia de valor a x y y""" self.x += x self.y += y def distancia(self, otra_ciudad): """Metodo que calcula la distancia con respecto a otra ciudad""" xi = pow(otra_ciudad.x-self.x,2) yi = pow(otra_ciudad.y-self.y,2) return sqrt(xi+ yi) def __del__(self): """Elimina la clase""" #obtener el nombre de una clase class_name = self.__class__.__name__ print('class ', class_name, 'destroyed') #Inicializando un metodo estatico #Es el caso que no se referencia al objeto en si mismo con #self @staticmethod def info(): """Metodo que devuelve el nombre del desarrollador""" return "Desarrollado por Seraph" if __name__ == "__main__": a = Ciudad('Valencia',5,5) b = Ciudad('Maracay',5,15) print(a) print(b) print(Ciudad.cont_ciudad) a.mover_a(4,3) b.mover_a(7,12) print(a.info()) print(a) print(b)
El método info maneja un decorador llamado staticmethod que lo define como un método estático, ya que no se le pasa self para trabajar con métodos o variables del mismo objeto.
El resultado de ejecutar el script es el siguiente:
Ciudad: Valencia,id= 1,x= 5,y=5
Ciudad: Maracay,id= 2,x= 5,y=15
2
Desarrollado por Seraph
Ciudad: Valencia,id= 1,x= 9,y=8
Ciudad: Maracay,id= 2,x= 12,y=27
('class\t', 'Ciudad', 'destroyed')
('class\t', 'Ciudad', 'destroyed')
No hay comentarios:
Publicar un comentario