【发布时间】:2013-03-14 18:44:03
【问题描述】:
我想做的是创建一个带有类的模块;和一个函数,它是该类的接口;以及此函数中的动态变量名,它指向该类的实例。这个函数和类本身应该在一个单独的模块中,它们的用法应该在不同的python文件中。
我认为,当您查看我的代码时,更容易理解我想要做什么:
这是first.py:
class FirstClass:
def setID(self, _id):
self.id = _id
def func(self):
pass
# An 'interface' for FirstClass
def fst(ID):
globals()['%s' % ID] = FirstClass(ID)
return globals()['%s' % ID]
现在,如果我在first.py 中直接调用fst('some_text'),结果几乎就是我梦寐以求的,因为以后,任何时候我写some_text.func(),它都会调用func(),因为some_text 指向 FirstClass 的一个实例。
但是,当second.py 是这样的:
from first import fst
fst('sample_name')
sample_name.func()
那么python给出的答案是这样的:
NameError: name 'sample_name' is not defined.
这有点合理。所以我的问题是:是否有“更漂亮”的方法或完全不同的方法来做到这一点?还是我必须更改代码中的一些小东西才能完成这项工作?
谢谢!
【问题讨论】:
-
你认为你为什么需要这个?
-
全球是邪恶的。永远不要使用全局。了解如果外部读者阅读您的程序,他将永远无法理解此变量是如何设置的。永远不要使用魔法,或者很好地记录它。
explicit is better than implicit: Python 之禅 -
@BurhanKhalid:实际上我正在为设计师开发一个小型 GUI 框架,我认为只调用一个函数(例如
rectangle())而不是像 @ 那样创建整个对象会非常好987654334@. -
@omoone:是的,我知道 Python 之禅,我每天都在使用它,但就我而言,关键是:隐藏它的来源,因为我正在做的是一个小而设计师的有限框架。
标签: python class interface module on-the-fly