La forma típica de agregar funcionalidad a una función es utilizar un decorator (usando the wraps function):
from functools import wraps
def add_message(func):
@wraps
def with_additional_message(*args, **kwargs)
try:
return func(*args, **kwargs)
finally:
print "and here"
return with_additional_message
class A:
@add_message
def test(self):
print "here"
Por supuesto, lo que realmente depende de lo que estamos tratando de lograr. Yo uso decoradores mucho, pero si todo lo que quería hacer era imprimir mensajes adicionales, probablemente haría algo así como
class A:
def __init__(self):
self.messages = ["here"]
def test(self):
for message in self.messages:
print message
a = A()
a.test() # prints "here"
a.messages.append("and here")
a.test() # prints "here" then "and here"
Esto no requiere meta-programación, pero por otra parte su ejemplo fue probablemente muy simplificado de lo que realmente necesitas hacer Quizás si publica más detalles sobre sus necesidades específicas, podemos aconsejar mejor cuál sería el enfoque Pythonic.
EDITAR: Como parece que quiere llamar a funciones, puede tener una lista de funciones en lugar de una lista de mensajes. Por ejemplo:
class A:
def __init__(self):
self.funcs = []
def test(self):
print "here"
for func in self.funcs:
func()
def test2():
print "and here"
a = A()
a.funcs.append(test2)
a.test() # prints "here" then "and here"
Tenga en cuenta que si desea agregar funciones que serán llamados por todas las instancias de A
, entonces usted debe hacer funcs
un campo de clase en lugar de un campo de instancia, por ejemplo,
class A:
funcs = []
def test(self):
print "here"
for func in self.funcs:
func()
def test2():
print "and here"
A.funcs.append(test2)
a = A()
a.test() # print "here" then "and here"
gracias, esto es lo que necesitaba – Timmy