In [1]:
#palabra reservada class
class FirstClass: #Definimos una nueva clase
def setdata(self, value): #definimos un metodo de la clase
self.data = value #self hace mencion a la instancia
def display(self):
print self.data
In [2]:
#creamos una instancia de FirstClass
primera_clase = FirstClass()
In [3]:
#seteamos el atributo de FirstClass
primera_clase.setdata("37")
In [4]:
#ejecutamos el metodo del objeto
primera_clase.display()
Por como definimos la clase, podemos agregar los atributos que queramos, osea que no son privados
In [5]:
#agregamos un atributo al objeto que no estaba en la clase base
primera_clase.atr = 73
Segundo ejemplo, donde creamos una segunda clase que es subclase de la anterior. Por ello hereda todos los metodos y atributos, además redefinimos el metodo display
In [6]:
class SecondClass(FirstClass): #subclase(superclase1, superclase2, ....):
def display(self): #redefinimos display
print 'El valor actual = ', self.data
In [7]:
segunda_clase = SecondClass()
In [8]:
segunda_clase.setdata(73)
In [9]:
segunda_clase.display()
Existen metodos especiales
__X__()
__add__()
__init__()
que son fijos para todas las clases, estos metodos especiales nos permiten integrar de manera natural todos los objetos y las clases ya existentes es lo que se conoce como automatic dispatch mechanism (mecanismo de envío automático): Por ejemplo esto nos permite definir como debe ser la suma de dos clases, como debe ser el slicing de un objeto.... etc
Vamos a implementar una tercera clase que sera subclase de la segunda y además vamos a agregar algunos operadores
In [10]:
class ThirdClass(SecondClass):
def __init__(self, value): #constructor
self.data = value
def __add__(self, other): #metodo para suma de dos objetos ThirdClass
return ThirdClass(self.data + other)
def __str__(self): #metodo para imprimir el objeto
return '[ThirdClass: %s]' % self.data
def mul(self, other): #metodo para multiplicar dos objetos ThirdClass
self.data *= other
In [11]:
tercera_clase = ThirdClass('abs')
In [12]:
tercera_clase.display() #lo que heredo de SecondClass
In [13]:
print tercera_clase #aca llama al metodo __str__
In [14]:
tercera_clase.mul(7)
In [15]:
print tercera_clase
In [16]:
b = tercera_clase + 'hola' #b es ahora una instancia de ThirdClass
In [17]:
print b
Ahora vamos a hacer unos ejemplos más realistas, vamos a modelar una persona y un gerente, pero los vamos a colocar a todas las clases en un archivo aparte
In [18]:
# corremos el archivo donde esta la clase Person
%run person.py
In [19]:
%whos
In [20]:
#Realizamos una nueva clase ahora con nuevos metodos
%run person2.py
In [21]:
#Agregamos un nuevo metodo(built-in) para mostrarlo por pantalla
%run person3.py
In [21]: