是否可以使一串代码充当模块?

时间:2016-06-12 21:28:26

标签: python

让我说我有类似的东西:

source_string = """
class someClass:
   def __init__(self):
       self.s = "some String"
   def _return_s(self):
       return self.s

 """

我可以将此字符串转换为类似模块的对象吗?为了帮助您更好地理解:

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

如果可能,我的目标是建立一个使用URL的导入系统。

1 个答案:

答案 0 :(得分: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'

我不明白你为什么要这样做。为什么不能正常定义类?