こんにちはゲストさん。会員登録(無料)して質問・回答してみよう!

解決済みの質問

Pythonでcall_user_funcを行う

お世話になります。

最近Pythonの勉強を始めた初心者です。
GAE/Python2.5で、PHPで言うcall_user_funcを使う方法を探しております。
具体的に言いますと、関数名(メソッド名)を変数に入れて、それを呼び出す方法を探しています。

例えばPHPで言えば下記のようなコードです。
----------------------
<?php
// 呼び出すクラス
class CTestClass
{
  // 呼び出すメソッド
  function TestFunc()
  {
    echo 'Call <CTestClass::TestFunc()>';
  }
}

// 変数にメソッド名を入れて呼び出す
$func = 'TestFunc';
$obj = new CTestClass();

call_user_func( array( $obj, $func ) );
// print Call <CTestClass::TestFunc()>
----------------------

Pythonでは上記のような事は可能でしょうか?
また、メソッドを呼び出すのと普通のグローバル関数を呼び出すのでやり方が違う場合はそちらも教えて頂けるとあり難いです。

以上、よろしくお願い致します。

投稿日時 - 2011-03-06 18:53:34

QNo.6573520

困ってます

質問者が選んだベストアンサー

PHPは知らないけどPythonなら

def func(a,b,c):
 ...
x=func
x(a,b,c)
くらいで書けると思うけど。
あと、Pythonではクラスのメソッドは最初の引数がselfな関数に過ぎないから、関数形式の呼び出しを使うなら気にしなくて良い。
具体的には
class A:
 def f(self,b,c):
  ...
A a
と定義すると
a.f(b,c)
でも
f(a,b,c)
でも呼び出し可能になる。

投稿日時 - 2011-03-08 09:21:37

お礼

回答有難う御座いました。
質問の意図とは若干違いましたが、今後参考にさせて頂きます。

ちなみに本件については自己解決しました。
以下の様な形で指定できました。

--------------------
# オブジェクトVer
class TestClass():
 def TestMethod( self ):
  print 'Call TestClass::TestMethod';

method = 'TestMethod';

obj = TestClass();
getattr( obj, method )();
# print Call TestClass::TestMethod

# グローバル関数Ver
def TestFunc():
 print 'Call TestFunc';

func = 'TestFunc';

globals()[ func ]();
# print Call TestFunc
--------------------

投稿日時 - 2011-03-09 23:44:13

ANo.1

このQ&Aは役に立ちましたか?

0人が「このQ&Aが役に立った」と投票しています

回答(1)

あなたにオススメの質問