Python 使用变量值创建类实例
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'。我不能直
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章,这样你们才能对事情的运作方式有一个基本的了解。如果你知道的话,里面塞满了你随时都需要的实用而漂亮的东西。