2016-06-12 12 views
0

のは、私のようなものを持っているとしましょうか?コードの文字列をモジュールのように動作させることは可能ですか?</p> <pre><code>source_string = """ class someClass: def __init__(self): self.s = "some String" def _return_s(self): return self.s """ </code></pre> <p>が、私はモジュールのようなオブジェクトにこの文字列を変えることができます:

SomeClassModule = _import(source_string) 
print(SomeClassModule.someClass()._return_s()) 

可能であれば、私の目標はURLを使用するインポートシステムを作ることです。

+1

任意のPythonソースコード文字列を実行できます。http://stackoverflow.com/q/701802/3001761 – jonrsharpe

+0

これは 'eval()'が使用されるようですが、 'eval'は悪です –

+0

eval is execが – lejlot

答えて

0

execを使用すると、指摘されているようにこれを行うことができます。試してみてください:

>>> source_string = """ 
... class someClass: 
... def __init__(self): 
...  self.s = "some String" 
... def _return_s(self): 
...  return self.s 
... 
... """ 
>>> exec(source_string) 
>>> dir() 
['__builtins__', '__doc__', '__loader__', '__name__', '__package__', '__spec__', 'ask', 'random', 'someClass', 'source_string', 'var'] 
>>> x = someClass() 
>>> x 
<__main__.someClass object at 0x7f131424a1d0> 
>>> dir(x) 
['__class__', '__delattr__', '__dict__', '__dir__', '__doc__', '__eq__', '__format__', '__ge__', '__getattribute__', '__gt__', '__hash__', '__init__', '__le__', '__lt__', '__module__', '__ne__', '__new__', '__reduce__', '__reduce_ex__', '__repr__', '__setattr__', '__sizeof__', '__str__', '__subclasshook__', '__weakref__', '_return_s', 's'] 
>>> x.s 
'some String' 
>>> x._return_s() 
'some String' 

私はなぜこれをやりたいのか分かりません。なぜあなたはクラスを普通に定義できないのですか?

+0

私はexecを使うことができると知っていますが、私が必要とすることはしません。私は必要なことをすることができますが、それは少しハッキリです。私は、インポートのようなコードの文字列を返すものが必要でした。しかし、私はそれが箱の外で可能であるとは思わない。私がこれをやりたかった理由は、URLを使ってものをインポートしたかったからです。例えば、 'module = _import(" http://example.com/modules/mod.py ")' – user3103366

+0

ああ、私は理解していると思います。 –

+0

他のすべてのクラスを含むクラスを作成し、それを単に返す必要があります。 – Sasszem

関連する問題

 関連する問題