2009-06-17 28 views
6

文字列を使用してクラスのメソッドを呼び出す方法はありますか?ここでは(私はそれがあるべきだと思う方法を使用して)うまくいけば、より良い説明します例です:文字列を変数名として使用する

class helloworld(): 
    def world(self): 
     print "Hello World!" 

str = "world" 
hello = helloworld() 

hello.`str`() 

だろう出力Hello World!

ありがとうございます。

+0

ある出力は "Hello World" のであるべきか、「ハロー世界! " – Buddy

答えて

16

あなたはgetattrを使用することができます。

>>> class helloworld: 
...  def world(self): 
...   print("Hello World!") 
... 
>>> m = "world" 
>>> hello = helloworld() 
>>> getattr(hello, m)() 
Hello World! 
  • 注あなたの例のようにclass helloworld()中括弧は、この場合には、不必要であるということ。
  • そして、SilentGhostが指摘するように、strは変数にとって不幸な名前です。
+4

strは変数名にとっては悪い選択です。 – SilentGhost

-3

片道あなただけのデータ

def thing1(): 
    print "stuff" 

def thing2(): 
    print "other stuff" 

avariable = thing1 
avariable() 
avariable = thing2 
avariable() 

のような機能に等しくなるように変数を設定することができ、you'lが得る出力が

stuff 
other stuff 

で次にあなたがより複雑に得ることができますし、 have

somedictionary["world"] = world 
somedictionary["anotherfunction"] = anotherfunction 

などです。あなたは、自動的に辞書を使用するディレクトリへのモジュールのメソッドを()コンパイルしたい場合は

+2

blahを呼び出してthing1の出力をどのように取得できますか? –

2

警告:Execは、使用それは

ます。また、組み込み関数を使用することができます使用する前に、それを研究する危険な機能です"実行":

>>> def foo(): print('foo was called'); 
... 
>>> some_string = 'foo'; 
>>> exec(some_string + '()'); 
foo was called 
>>> 
+3

本当に良いアイデアはありません。可能であればexecは避けるべきです。 getattrはこの問題のために作られています。 – Stephan202

+2

*何が*安全*であるかどうかを何とかする方法を混乱させないでください。 execは本当に危険な機能です。ただし、安全に使用する方法があります。この場合、「サンドボックス」内でexecを実行するために、「グローバル」および「ローカル」コンテキスト辞書を渡すことができます。 – AgentLiquid

+1

私はexec()についてひどいことを聞いてきましたが、これは完全に機能しました。 –

-3

あなたが探していることはexec

class helloworld(): 
    def world(self): 
     print "Hello World!" 

str = "world" 
hello = helloworld() 

completeString = "hello.%s()" % str 

exec(completString) 
+1

これはちょうど間違っている – SilentGhost

+0

私は以前に "exec"を使ったことはありませんが、私は再考すると思います...アップモデリング。 –

関連する問題