在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"
这对于我正在处理的项目能够用Python来做是很方便的(要解析许多讨厌的XML,将它转换为对象并且能够只调用方法会很好。
Python是否具有等价物?
答案 0 :(得分:14)
在对象上定义__getattr__方法,并从中返回一个函数(或闭包)。
In [1]: class A:
...: def __getattr__(self, name):
...: def function():
...: print("You tried to call a method named: %s" % name)
...: return function
...:
...:
In [2]: a = A()
In [3]: a.test()
You tried to call a method named: test
答案 1 :(得分:1)
你可能想要__getattr__
,虽然它适用于类属性和方法(因为方法只是作为函数的属性)。
答案 2 :(得分:0)
我一直在寻找相同但是因为方法调用是一个两步操作,如: * 1.获取属性(obj。 _ getattr _ ) * 2.调用它(gotObject。 _ 调用 _ )
没有任何神奇的方法可以预测这两种行为。