Python 指定导入方法的上下文
我有两个文件。在第一个示例中,有一个可供导出的词典:Python 指定导入方法的上下文,python,Python,我有两个文件。在第一个示例中,有一个可供导出的词典: __all__ = ['container'] def show_name(self): myFunction() print self.name container = { 'show_name': show_name } 在第二个文件中,我导入myFunction,并定义类Person: from myModule import myFunction class Person: def __init__(s
__all__ = ['container']
def show_name(self):
myFunction()
print self.name
container = {
'show_name': show_name
}
在第二个文件中,我导入myFunction
,并定义类Person
:
from myModule import myFunction
class Person:
def __init__(self):
self.name = 'Bob'
self.show_name = types.MethodType(container['show_name'], self)
person = Person()
问题是,当我调用person.show_name()
时,我得到错误:
NameError:未定义全局名称“myFunction”
如何让
Person.show_name
访问与Person
相同的功能 将从myModule导入myFunction
移动到定义了显示名称
的同一文件中
顺便说一下
class Person:
def __init__(self):
self.name = 'Bob'
self.show_name = types.MethodType(container['show_name'], self)
使('show_name',)
成为self.\uu dict\uuu
中的键值对。这使得Person的每个实例都获得一个新的、独立的键值对
为了节省内存,您可能需要将其更改为
myFunction()是在哪里定义的?我想你指的是
container
你写display
的地方。我觉得你最近的问题的根源是设计问题。我们可以向您展示如何克服此设计问题的症状,但我们无法解决真正的问题,因为我们对系统了解不够。可以从f=container['show_name']
创建一个新的函数对象,并使用types访问当前全局函数。FunctionType(f.\uu code\uuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuu;我不认为这个黑客可以解决实际问题,所以我不会把它作为一个答案发布。@SvenMarnach:你很可能是对的!设计问题是我没有使用mixin和类继承。我慢慢地但肯定地掌握了Python的诀窍。我无法做到这一点,因为有一个infiteimport
循环问题,而且因为人也需要myFunction
。还有其他解决方案可以确保关闭吗?@Randomblue:您可以将myFunction
作为参数传递给show\u name
。@Randomblue:您可以按照larsmans的建议执行,或者重构myModule
,这样就可以导入正确的代码,而不会出现任何导入问题。
class Person:
show_name = container['show_name']
def __init__(self):
self.name = 'Bob'