En PHP, que puede hacer algo como esto:equivalente en Python del método mágico de PHPs __call()?
class MyClass
{
function __call($name, $args)
{
print('you tried to call a the method named: ' . $name);
}
}
$Obj = new MyClass();
$Obj->nonexistant_method(); // prints "you tried to call a method named: nonexistant_method"
Esto sería útil para poder hacerlo en Python para un proyecto que estoy trabajando (un montón de XML para analizar desagradable, que sería agradable para convertirlo en objetos y ser capaz de simplemente llamar a métodos.
¿el Python tiene un equivalente?
Bastante bien, aunque también podría ser útil definir la función anidada como 'función (* args)' para que el cuerpo pueda usar tanto el nombre de la función como los argumentos pasados. Depende de lo que Keith quiera que hagan los métodos. (Por supuesto, si nunca existieran argumentos para alguno de los métodos, '__getattr__' mismo podría devolver el resultado, simulando así campos en lugar de métodos). –
De hecho, quiero poder obtener los argumentos de la función como bien. Es el único cambio necesario para definir la función def(): como función def (* args) :? ¿O necesito hacer algo más también? (Novato Python, lo siento!) –
@Keith: si la función toma argumentos arbitrarios, entonces ponga '* args' en la lista de argumentos y recibirá una tupla con todos los argumentos. Si se trata de un número fijo de argumentos, puede seguir adelante y definir 'function (a, b)' directamente, por ejemplo, para tomar dos argumentos. – Juliano