10

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には同等のものがありますか?

4

3 に答える 3

18

オブジェクトに__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
于 2010-09-03T18:01:39.440 に答える
1

おそらく が必要です__getattr__が、メソッドだけでなくクラス属性でも機能します (メソッドは関数である単なる属性であるため)。

于 2010-09-03T18:00:31.237 に答える
0

私は同じものを探していましたが、メソッドの呼び出しは次のような 2段階操作あるためです。

両方のアクションを予測する魔法の方法はありません。

于 2012-11-13T17:01:47.127 に答える