Python 使用变量值创建类实例

Python 使用变量值创建类实例,python,Python,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'。我不能直

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

每当您想要动态地创建变量名时,您都需要停下来告诉自己字典是一种更好的方法。如果您想让类实例在任何地方都可用,这也不是最好的主意,但下面介绍了如何做到这一点:

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属性在最近创建的具有特定名称的实例上保留一个句柄,因此您可以在该测试可用的任何地方对实例拥有一个句柄


但是,我不推荐这种类型的设计。这里的缺点与使用全局变量的缺点相同。很可能很难维护,很难判断到底发生了什么,等等。这仅仅是因为通过程序的数据流不是有序的。

任何时候,如果你想动态创建变量名,你都需要停下来告诉自己字典是更好的方法。如果您想让类实例在任何地方都可用,这也不是最好的主意,但下面介绍了如何做到这一点:

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属性在最近创建的具有特定名称的实例上保留一个句柄,因此您可以在该测试可用的任何地方对实例拥有一个句柄

但是,我不推荐这种类型的设计。这里的缺点与使用全局变量的缺点相同。这可能会变得很难维护,很难判断到底发生了什么,等等。这仅仅是因为通过程序的数据流不是有序的。

请尝试打印b2.name

注意:该名称对Python没有任何特殊意义。给类命名对Python来说毫无意义,它只是执行您编写的代码。给类命名对您来说意味着什么,但Python不能也不会读懂您的心思:-

因此,将b2引用的实例的名称设置为a2不会神奇地创建引用a2

对变量名的介绍可能有助于:

简而言之,如果你写

a = 'x'
蟒蛇

创建字符串实例 将文本x指定给该字符串实例的值 将此新字符串实例的引用指定给别名a 如果你写:

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

请改用print b2.name

注意:该名称对Python没有任何特殊意义。给类命名对Python来说毫无意义,它只是执行您编写的代码。给类命名对您来说意味着什么,但Python不能也不会读懂您的心思:-

因此,将b2引用的实例的名称设置为a2不会神奇地创建引用a2

对变量名的介绍可能有助于:

简而言之,如果你写

a = 'x'
蟒蛇

创建字符串实例 将文本x指定给该字符串实例的值 将此新字符串实例的引用指定给别名a 如果你写:

b = a

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

最接近您要查找的内容是将所有实例存储在字典中:

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

引用对象的变量的名称与对象本身之间没有联系。

最接近您要查找的内容是将所有实例存储在字典中:

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

引用对象的变量名与对象本身之间没有任何联系。

不得将对象用作变量名。疯狂的事情会发生。我不确定你想要完成什么,但你从来没有定义a2。请参阅上下文。此外,你需要重新设计。使用字典或其他类型的关联。我必须创建类的多个实例,并且从脚本的其他部分输出值,所以我必须将它们存储在某个变量中。但在脚本中的某个时刻,我希望访问这些实例。所以我现在遇到了这个问题。有其他解决方法吗?你不应该使用object作为变量名。疯狂的事情会发生。我不确定你想要完成什么,但你从来没有定义a2。请参阅上下文。此外,你需要重新设计。使用字典或其他类型的关联。我必须创建类的多个实例,并且从脚本的其他部分输出值,所以我必须存储
它们在一些变量中。但在脚本中的某个时刻,我希望访问这些实例。所以我现在遇到了这个问题。有没有其他解决办法?这只是一个例子来说明我的问题。在我的实际脚本中,变量b2仅用于创建多个实例,因此不能这样使用。只有它的唯一值才能用于访问它创建的实例。这意味着这是不可能的,我必须考虑其他解决方案?使用其他地方建议的字典。从你的问题来看,我只是不确定你是否知道Python是如何工作的。这只是一个例子来说明我的问题。在我的实际脚本中,变量b2仅用于创建多个实例,因此不能这样使用。只有它的唯一值才能用于访问它创建的实例。这意味着这是不可能的,我必须考虑其他解决方案?使用其他地方建议的字典。从你的问题来看,我只是不确定你是否知道Python是如何工作的。@lazyr,我对它在函数中的用法感到困惑。无论如何,非常感谢你的帮助@没问题。但你们真的应该至少看一下第3、4和5章,这样你们才能对事情的运作方式有一个基本的了解。如果你知道的话,它里面塞满了你一直需要的实用而漂亮的东西。@lazyr,我对它在函数中的用法感到困惑。无论如何,非常感谢你的帮助@没问题。但你们真的应该至少看一下第3、4和5章,这样你们才能对事情的运作方式有一个基本的了解。如果你知道的话,里面塞满了你随时都需要的实用而漂亮的东西。