2012-08-02 126 views
1

使用变量值有Python中的方式,我可以使用的变量值创建类的实例创建类的实例

class Test(object): 
    def __init__(self, object): 
     self.name = object 
     print "Created Object :",self.name 

a1 = Test('a1') 
print a1.name 
b2 = 'a2' 
b2 = Test(b2) 
print a2.name 

的在这个例子中,我想要的类实例的名称应该是“A1 '和'a2'。我不能直接使用值'a2',因为它是从其他进程计算得出的,但类实例名称必须与它匹配,以便可以访问它。

在上面的例子中,它提供了错误:

Created Object : a1 
a1 
Created Object : a2 

Traceback (most recent call last): 
File "D:\a\h", line 12, in <module> 
print a2.name 
NameError: name 'a2' is not defined 
+4

不应该使用'object'作为变量名。疯狂的事情会发生。 – 2012-08-02 12:58:54

+1

我不确定你想完成什么,但你永远不会定义'a2'。 – Makoto 2012-08-02 12:59:03

+0

请参阅[OPs previous question](http://stackoverflow.com/questions/11775652/error-accessing-class-objects-in-python)上下文。 – 2012-08-02 12:59:55

回答

3

最接近的事对你在找什么是所有实例存储在词典:

class Test(object): 
    def __init__(self, n): 
     self.name = n 
     print "Created Object :",self.name 

d = {} 
d['a1'] = Test('a1') 
print d['a1'].name 
b2 = 'a2' 
d[b2] = Test(b2) 
print d['a2'].name 

有引用一个对象和对象本身的变量名称之间没有任何联系。

+1

@sarbjit我已经在你的最后一个问题中告诉你了。 – 2012-08-02 13:28:13

+0

@lazyr,我对它在函数中的用法感到困惑。无论如何非常感谢您的帮助! – sarbjit 2012-08-02 13:41:25

+1

@sarbjit没问题。但是你真的应该至少查看[python教程](http://docs.python.org/tutorial/)的第3,4和5章,以便对事物的工作方式有一个基本的了解。如果你了解它们,那么它会塞满你一直需要的实用和漂亮的东西。 – 2012-08-02 13:48:10

4

要动态地创建变量名任何时候,你需要停下来,告诉自己,一本字典是一个更好的路要走。如果您希望类的实例是可在任何地方(这也是不是最好的主意),但这里是你如何能做到这一点:

class Test(object): 
    instance_dict={} 
    def __init__(self,name): 
     self.name=name 
     self.instance_dict[name] = self 

现在你可以使用这个类:

a1 = Test("a1") 
print a1 is Test.instance_dict["a1"] #True 
b1 = Test("a2") 
print b1 is Test.instance_dict["a2"] #True 

在换句话说,instance_dict class属性会在最近创建的实例上保留一个句柄,并使用特定的名称,因此您可以在Test可用的任何位置处理实例。

但是,我不推荐这种类型的设计。这里的缺点与使用全局变量的缺点相同。这可能会变得很难维护,很难说出究竟发生了什么,等等,只是因为通过你的程序的数据流没有很好的排序。

1

改为尝试print b2.name

注意:名称name对Python没有任何特殊意义。 “给你的类一个名字”对Python没有任何意义,它只是执行你编写的代码。 “给你的类名”是指东西但是Python不能,也不会读你的心:-)

所以通过设置引用b2a2实例的名称不会奇迹般地创造参考文献a2

此次推出的新变量名可以帮助:Learn to Program Using Python: Variables and Identifiers

简而言之,如果你写

a = 'x' 

的Python

  1. 创建一个字符串实例
  2. 分配一个值,字符串实例(文本x
  3. 指定一个参考这个新的字符串实例别名a

如果你接着写:

b = a 

仍然只有内存中的单串实例。您只创建了第二个别名b,它引用与a相同的字符串实例。

+0

这只是一个示例来显示我的问题。在我的实际脚本中,变量b2仅用于创建多个实例,因此不能像这样使用。只有它唯一的值才能用于访问它创建的实例。 – sarbjit 2012-08-02 13:10:00

+0

这意味着这是不可能的,我不得不考虑一些其他的解决方案? – sarbjit 2012-08-02 13:18:28

+0

使用其他地方建议的字典。从你的问题,我只是不确定你是否知道Python是如何工作的。 – 2012-08-02 14:11:29