In PHP, posso fare qualcosa di simile:Python equivalente al metodo magico __call() di PHP?
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"
Questo sarebbe utile per essere in grado di fare in Python per un progetto su cui sto lavorando (un sacco di brutta XML per analizzare, sarebbe bello trasformarlo in oggetti ed essere in grado di chiamare i metodi.
fa Python ha un equivalente?
Abbastanza buono, anche se potrebbe essere utile definire la funzione nidificata come 'function (* args)' in modo che il corpo possa utilizzare sia il nome della funzione sia gli argomenti passati. Dipende da ciò che Keith vuole che i metodi facciano. (Ovviamente se non ci saranno mai argomenti per nessuno dei metodi, '__getattr__' stesso potrebbe restituire il risultato, simulando quindi i campi invece dei metodi.) –
In realtà voglio essere in grado di ottenere gli argomenti della funzione come bene. È l'unica modifica necessaria per definire la funzione def(): come funzione def (* args) :? O devo fare anche qualcos'altro? (Python newbie, sorry!) –
@Keith: Se la funzione accetta argomenti arbitrari, quindi metti '* args' nella lista degli argomenti e riceverà una tupla con tutti gli argomenti. Se è un numero fisso di argomenti, allora puoi semplicemente andare avanti e definire 'function (a, b)' direttamente, per esempio, per prendere due argomenti. – Juliano