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的诀窍。我无法做到这一点,因为有一个infite
import
循环问题,而且因为人也需要
myFunction
。还有其他解决方案可以确保关闭吗?@Randomblue:您可以将
myFunction
作为参数传递给
show\u name
。@Randomblue:您可以按照larsmans的建议执行,或者重构
myModule
,这样就可以导入正确的代码,而不会出现任何导入问题。
class Person:
   show_name = container['show_name']
   def __init__(self):
      self.name = 'Bob'