Skip to content

emezeta/pyconuy

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

38 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

Propuesta de llamado a charlas PyCon.Uy 2012:

  • TODO: ...
  • ing: texto RFC web - inglés
  • esp: español
  • call4speakers-eng: borrador para apertura del llamado - inglés
  • call4speakers-es: español
  • announce-en: spam para las masas - inglés
  • anuncio-es: español
  • readme.rst: este archivo

Métodos de instancia

Cuando se crea un método de instancia, el primer parámetro es siempre self. Puedes nombrarlo como quieras, pero el significado siempre será el mismo, y deberías usar self ya que es la convención de nombres. self es (usualmente) pasado de forma oculta cuando se llama a un método de instancia; representa la instancia que llama al método.

He aquí un ejemplo de una clase llamada Inst que tiene un método de instancia llamado introduce():

::

class Inst:

def __init__(self, name):
self.name = name
def introduce(self):
print("Hello, I am %s, and my name is " %(self, self.name))

Ahora, para llamar a este método, primero necesitamos crear una instancia de nuestra clase. Una vez que tenemos una instancia, podemos llamar a introduce() en ella, y la instancia será automáticamente pasada como self:

::
myinst = Inst("Test Instance") otherinst = Inst("An other instance") myinst.introduce() # outputs: Hello, I am <Inst object at x>, and my name is Test Instance otherinst.introduce() # outputs: Hello, I am <Inst object at y>, and my name is An other instance

Como ves, no estamos pasando el parámetro self, sino que se pasa de forma oculta con el operador "." estamos llamando a ”intoduce()”, método de instancia de la clase Inst, con el parámetro de myinst u otroinst. Esto significa que podemos llamar a Inst.introduce(myinst) y obtener exactamente el mismo resultado.

Métodos de clase

La idea del método de la clase es muy similar al método de la instancia, con la única diferencia de que en lugar de pasar la instancia de forma oculta como un primer parámetro, ahora estamos pasando la clase misma como un primer parámetro.

::

class Cls:

@classmethod def introduce(cls):

print("Hello, I am %s!" %cls)

Ya que estamos pasando sólo una clase al método, no hay ninguna instancia involucrada. Esto significa que no necesitamos una instancia en absoluto, llamamos al método de la clase como si fuera una función estática:

::
Cls.introduce() # same as Cls.introduce(Cls) # outputs: Hello, I am <class 'Cls'>

Note que de nuevo Cls se pasa de forma oculta, por lo que también podríamos decir Cls.introduce(Inst) y obtener la salida "Hello, I am <class 'Inst'>. Esto es particularmente útil cuando estamos heredando una clase de Cls:

::
class SubCls(Cls):
pass

SubCls.introduce() # outputs: Hello, I am <class 'SubCls'>

Releases

No releases published

Packages