Un método es una función que toma una instancia de clase como su primer parámetro. Los métodos son miembros de clases.
class C:
def method(self, possibly, other, arguments):
pass # do something here
Como quería saber qué significa específicamente en Python, se puede distinguir entre métodos enlazados y no vinculados. En Python, todas las funciones (y como tales también los métodos) son objetos que se pueden pasar y "jugar con". Así que la diferencia entre los métodos no unidos y ligados es:
1) métodos Bound
# Create an instance of C and call method()
instance = C()
print instance.method # prints '<bound method C.method of <__main__.C instance at 0x00FC50F8>>'
instance.method(1, 2, 3) # normal method call
f = instance.method
f(1, 2, 3) # method call without using the variable 'instance' explicitly
métodos Bound son métodos que pertenecen a instancias de una clase. En este ejemplo, instance.method
está vinculado a la instancia llamada instance
. Cada vez que se invoca ese método enlazado, la instancia pasa como primer parámetro automágicamente, que se llama self
por convención.
2) métodos no unidos
print C.method # prints '<unbound method C.method>'
instance = C()
C.method(instance, 1, 2, 3) # this call is the same as...
f = C.method
f(instance, 1, 2, 3) # ..this one...
instance.method(1, 2, 3) # and the same as calling the bound method as you would usually do
Cuando acceda C.method
(el método dentro de una clase en lugar de en el interior de una instancia), se obtiene un método no unido. Si desea llamarlo, debe pasar la instancia como primer parámetro porque el método es no vinculado a cualquier instancia.
Al conocer esa diferencia, puede hacer uso de funciones/métodos como objetos, como pasar los métodos a su alrededor. Como ejemplo de caso de uso, imagine una API que le permita definir una función de devolución de llamada, pero desea proporcionar un método como función de devolución de llamada. No hay problema, simplemente pase self.myCallbackMethod
como devolución de llamada y se llamará automáticamente con la instancia como primer argumento. Esto no sería posible en lenguajes estáticos como C++ (o solo con trucos).
Espero que entiendas el punto;) Creo que eso es todo lo que debes saber sobre los conceptos básicos del método. También puede leer más sobre los decoradores classmethod
y staticmethod
, pero ese es otro tema.
"many Python tutorials"? ¿De qué tutoriales específicos estás hablando? No podemos recomendar uno diferente si no sabemos lo que estás leyendo actualmente. –
El método es un término general, no tiene un significado diferente en Python, probablemente por eso se usa de manera despreocupada. Ver http://en.wikipedia.org/wiki/Method_(computer_science) –
@ S.Lott: Lo siento, tal vez, fui demasiado absolutista al aprobar mi opinión sobre los tutoriales de Python. – brilliant