【发布时间】:2013-11-27 01:18:05
【问题描述】:
在编写 Python (2.5) 程序时,我尝试创建一个类,并在其 __init__ 函数中自动创建另一个类的实例,并将其名称作为 __init__ 函数的参数,如下所示:
class Class1:
def __init__(self,attribute):
self.attribute1=attribute
class Class2:
def __init__(self,instanceName):
#any of Class2's attributes
exec instanceName + '=Class1('attribute1')'
# this should produce an instance of Class1 whose name is instanceName
但是当我创建 Class2 的实例 instance=Class2('instance2') 并尝试获取 instance2 的属性 1(它应该是从 Class2 的 __init__ 函数创建的)时,我收到一条错误消息:
Traceback (most recent call last):
File "<pyshell#29>", line 1, in <module>
print instance2.attribute1
NameError: name 'instance2' is not defined
我不知道问题是什么,因为name='instance3' 和
exec name+'=Class1('attribute1') 确实有效,但这可能是因为我对 Python 没有太多经验。创建实例时如何自动执行此类操作?
【问题讨论】:
-
在 Python 2 中,你的类不应该扩展
object吗? -
你到底想做什么?我很确定有一种不涉及这种结构的方法可以做你想做的事。
-
似乎是一个 XY 问题 - 为什么需要将实例分配给特定名称?现在你正试图将它创建为一个局部变量,这没有什么意义,因为它只能在局部范围内访问。你的用例是什么?
-
当我添加
exec 'global '+instancename时,这仍然不起作用,这应该使它可以作为全局变量访问。 -
我这样做的目的是能够从 Class2 之一创建 Class1 的实例,同时还能够在不使用 Class2 的情况下创建实例,这是我知道的唯一方法.
标签: python class python-2.5