Beruflich Dokumente
Kultur Dokumente
ObjetosenPython3
DiegoAndrsAlvarezMarn
ProfesorAsociado
UniversidadNacionaldeColombia
SedeManizales
1
Tabladecontenido
Historia
Vocabulario
Laclasemnima
Atributosdelaclasey
delobjeto
2
Laprogramacinorientadaa
objetos(POO)
Apareci con el lenguaje Simula 67 en 1967 y
posteriormente dicho paradigma fue mejorado
conellenguajeSmalltalkenlos1970s.
El lenguaje C++ y el lenguaje Java
popularizaron su uso, especialmente, porque la
POO se utiliza frecuentemente para hacer los
entornosgrficosdelosprogramas(GUIs).
Python es un lenguaje primariamente orientado
a objetos, ya que en este todas las entidades
sonobjetos. 3
Vocabulario
Un objeto es una realizacin de una clase. Por ejemplo, en un juego de
estrategia,consideremoslaclaseguerrero.Enel contextodePOOcada
guerrerodeljuegoseraunobjeto,cadaunodeellosconatributos(edad,
salud,coraza,etc)ymtodos(caminar,pelear,comer,etc.)
Los datos que pertenecen a un objeto se les llama los "atributos (o
propiedades)delobjeto".Enunprogramaorientadoaobjetos,estosestn
ocultosatravsdeunainterfase,ysolosepuedeaccederalosatributos
del objeto a travs de funciones especiales, a las cuales se les llama
mtodos en el contexto de la POO. El poner los datos detrs de la
interfaseselellamaencapsulacin.
En trminos generales, un objeto se define por una clase. Una clase es
una descripcin formal del diseo de un objeto, es decir, especifica los
atributos y mtodos que el objeto tiene. A estos objetos tambin se les
llamaincorrectamenteenespaolinstancias(delingls"instances").Evite
confundirunaclaseconunobjeto.JorgeyMarasoninstanciasdelaclase
Persona.Nombrelaclaseconlaprimeraletraenmayscula. 4
EnPythontodaslasentidadesson
objetos
Guido van Rossum escribi: "One of my
goals for Python was to make it so that all
objectswere"firstclass."Bythis,Imeantthat
I wanted all objects that could be named in
the language (e.g., integers, strings,
functions,classes,modules,methods,andso
on)tohaveequalstatus.Thatis,theycanbe
assigned to variables, placed in lists, stored
indictionaries,passedasarguments,andso
forth."(Blog,TheHistoryofPython,February
27,2009)
5
Aqu L1 y L2 son objetos, los
cuales son realizaciones de la
clase list. Ellos tienen mtodos
asociados(append(),pop()).
6
LaclasemnimaenPython
Roboteslaclase
x,ysonobjetos
Eloperador=copiala
referencia.
LasdosinstanciasdelaclaseRobotsondiferentes.
7
Clasesdesolo
atributos
(similaralas
estructurasen Atributosde
C/C++) laclase
Atributos
delobjeto
8
Un problema muy comn cuando trabajamos con clases, es no especificar
con qu instancia de la clase queremos hacerlo. Si solo se ha creado una
direccin, es comprensible asumir que el computador sabr cmo usar la
direccin de la que ests hablando. Sin embargo, esto no siempre es as.
Observaelsiguienteejemplo:
9
10
Agregandomtodos
aunaclase
EstoesequivalenteadecirPerro.imprimir(p)Observe
queaquselfserefiereap.Lanotacinp.imprimir()
11
espreferibleyaqueeslaestndarenPOO.
Tresformasdiferentesdellamara
unmtodo
12
Agregandomtodosaunaclase
Cuando cree mtodos para las clases, tenga en cuenta las siguientes
observaciones:
Primerosedebenlistarlosatributos,luegolosmtodos.
El primer parmetro de un mtodo de una clase debe ser self. Este
parmetroserequiere,inclusosilafuncinnolousa.
Comotalllamarelprimerparmetroself esunaconvencin(self no
es una palabra reservada); podra usarse otro nombre, sin embargo,
estanextendidosuuso,queserecomiendautilizardichapalabra.
15
Atributosdelobjetovs.
Atributosdelaclase
Unatributodelobjetoesunavariablequetomaelvalordeacuerdo
alobjeto.Porejemploenunahabitacinllenadegente,cadapersona
tieneunaedad.Tambinselellamainstanceattributes(eningls).
They are owned by the specific instances of a class. This means for
twodifferentinstancestheinstanceattributesareusuallydifferent.
Losatributosdelaclasepertenecenalaclasemisma;sonatributos
quesoncompartidosportodoslosobjetosdelaclase,porloquees
el mismo atributo para cada objeto de la clase. We define class
attributes outside of all the methods, usually they are placed at the
top, right below the class header. Por ejemplo en un grupo de
personas,todassonhumanos.Sonaquellasvariablesquesedefinen
dentro de la clase pero fuera de los mtodos. Tambin se le llama
classattributes(eningls) 16
Losatributosdel
objetopueden
ocultarlosatributos
delaclase
17
En ClassA y es un
atributodelobjeto.
En ClassB x es un
atributodelaclase.
CAMBIARTEXTO!!!
18
CAMBIARTEXTO!!!
Losatributosdelobjetopueden
ocultarlosatributosdelaclase 19
Elatributo__dict__
Ver:
http://www.pythoncourse.eu/python3_class_and_instance_attributes.php
20
Elatributo__dict__
Continuandoconelejemploanterior:
Sielparmetronoexiste,retorna
elvalordadopordefecto.
22
Agregandoatributosalasfunciones
Agregar atributos a objetos es
posible en Python; incluso las
funciones pueden tener atributos.
Este tipo de atributos seran
atributosdelobjeto.
Estehechosepuedeutilizarparadefinir
variables estticas (en el sentido de
lenguaje C) en Python. Las variables
estticassonaquellasqueconservansu
23
valorentrellamadosafunciones
Elmtodo__str__()
24
Losmtodos
__str__()y__repr__()
25
If a class has a __str__
method, the method will be
used for an instance x of
that class, if either the
functionstrisappliedtoitor
if it is used in a print
function. __str__ will not be
used, if repr is called, or if
Salida por defecto de un we try to output the value
objetosinmtodo__repr__
directly in an interactive
Pythonshell.
obj == eval(repr(obj))
Referenciasyobjetos
Eloperador=copia
lareferencia,noel
objetocomotal
28
Objetos,funcionesyreferencias
Estaeslatabladesmboloscuando
setermindeejecutarestalnea.A
consignar_dinero_2()seest
transfiriendounareferenciaajuan,
29
nounacopiadejuan.
Elmtodode
copia
30
Atributospblicos,privadosy
protegidos
Losatributosprivados(comienzancondosguiones
bajos __) solo pueden ser llamados dentro de la
definicin de la clase. Por fuera de la clase son
inaccesibleseinvisibles.
Losatributos protegidosorestringidos(comienzan
conunguinbajo_)solosepuedenllamardesde
lassubclasescuandohayherenciaysubclases.
Losatributospblicos(comienzanconunaletra)se
pueden accesar libremente, dentro y fuera de la
definicindelaclase.
31
Sepuedeacceder
(leer/escribir)aunobjeto
privadomediante:
_nombreclase__atributo
Porejemplo_A__privado
SINEMBARGONOLOHAGA!
32
Elmtododestructor
In OOP, a destructor is a method which is automatically
invokedwhentheobjectisdisappearsfrommemory.Itcan
happen when its lifetime is bound to scope and the
execution leaves the scope, when it is embedded into
another object whose lifetime ends, or when it was
allocated dynamically and is released explicitly. Its main
purposeistofreetheresources(memoryallocations,open
files or sockets, database connections, resource locks,
etc.) which were acquired by the object along its life cycle
and/or deregister from other entities which may keep
referencestoit.
EldestructorenPythoneselmtodo__del__() 33
Losmtodosconstructor__init__()y
destructor__del__()
34
Mtodosestticos
Observe el siguiente problema
cuando accedemos un atributo
privadodelaclase.
Sitratamosdeutilizarelmtodo
Robot.RobotInstances1(),
observequeapareceunerror.
35
Ahora, si tratamos de utilizar el
mtodo RobotInstances2(), el
cual est definido sin el
parmetro self, entonces
podemos acceder al atributo
privado __counter a travs de
Robot.RobotInstances2(); sin
embargo,cuandolotratamosde
acceder a travs de un objeto
tenemos un error, porque el
llamado del objeto
inmediatamente pasa el
parmetro self que nadie est
recibiendo.
36
Nosotros queremos un mtodo que
pueda acceder al atributo privado de la
clase ya sea a travs del nombre de la
claseoatravsdelnombredeunobjeto.
Observeentonceselcomportamientodel
mtodo esttico RobotInstances3(). Es
justoloquedesebamos. 37
Mtodosclase
Los mtodos clase (class
methods), al igual que los
mtodos estticos no
dependen de los objetos,
pero a diferencia de los
mtodos estticos, ellos si
dependen de la clase a la
cual pertenecen. De hecho,
el primer parmetro de un
mtodo clase es una
referenciaalaclase.
Ver:
http://www.pythoncourse.eu/python3_class_and_instance_attributes.php
39
Encapsulacindedatos
http://en.wikipedia.org/wiki/Encapsulation_%28objectoriented_programming%29
Formasdeencapsular:Pblica,Protegidaorestringida,Privada
40
Mtodosdeaccesoymtodosdemutacin
(gettersandsetters)
http://en.wikipedia.org/wiki/Mutator_method
42
Dosobservacionesimportantes:
Wejustputthecodeline"self.x=x"inthe
44
Losmtodostambinsepueden
hacerprivados
Mtodoprivado
45
Herencia
Another powerful feature of using classes and
objectsistheabilitytomakeuseofinheritance.It
ispossibletocreateaclassandinheritallofthe
attributesandmethodsofaparentclass.
Our program can create child classes that will
inheritalltheattributesandmethodsoftheparent
class.Thechildclassesmaythenaddfieldsand
methodsthatcorrespondtotheirneeds.
46
Herencia
A class can inherit attributes and behaviour
methods from another class, called the
superclass. A class which inherits from a
superclass is called a subclass, also called heir
classorchildclass.Superclassesaresometimes
calledancestorsaswell.Thereexistsahierarchy
relationship between classes. It's similar to
relationshipsorcategorizationsthatweknowfrom
reallife.
47
Herencia
Bikes,cars,busesandtrucksarevehicles.pickups,vans,sports
cars, convertibles and estate cars are all cars and bybeing cars
they are vehicles aswell. Wecouldimplementa vehicleclassin
Python, which might have methods like accelerate and brake.
Cars, Buses and Trucks and Bikes can be implemented as 48
subclasseswhichwillinheritthesemethodsfromvehicle.
Aqu el atributo nombre
seestheredando.
Si se desea ejecutar
ambos constructores,
eldelaclasepadrey
el de la clase hija, la
clasehijadebellamar
explcitamente el
constructor de la
clasepadre.
Adicionalmente, se
est anteponiendo el
mtodo
Empleado.imprimir()
al mtodo
Persona.imprimir()
50
Otraformacomose
puedenllamarlos
mtodosdelaclasepadre
desdelaclasehija:
51
Sobrecargadefunciones
In the context of objectoriented programming,
overloading is the ability to define the same
method, with the same name but with a different
numberofargumentsandtypes.It'stheabilityof
onefunctiontoperformdifferenttasks,depending
on the number of parameters or the types of the
parameters.
http://www.pythoncourse.eu/python3_inheritance.php
52
Herenciamltiple
53
54
Enresumen,losprincipiosbsicos
delaPOOson:
Encapsulacin
Abstraccindedatos
Polimorfismo
Herencia
Sobrecargadeoperadores
55
Referencias
Wikipedia
http://www.programarcadegames.com/
http://www.pythoncourse.eu/python3_course.php
DocumentacindePython:
https://docs.python.org/3/tutorial/index.html
https://docs.python.org/3/
MarzalVar,Andrs;GraciaLuengo,Isabel;GarcaSevilla,
Pedro(2014).IntroduccinalaprogramacinconPython3.
Disponibleen:http://dx.doi.org/10.6035/Sapientia93
56