【发布时间】:2013-12-03 20:17:14
【问题描述】:
我正在使用 python 2.7,我想使用类创建某种数据结构
问题 A:
假设我创建了这个类:
class my_data():
def __init__(self,data1,data2,data3):
self.data1 = data1
self.data2 = data2
self.data3 = data3
然后我创建了一些类的实例,例如
d1 = my_data(1,2,None)
d2 = my_data(4,5,d1)
d3 = my_data(7,8,d2)
如您所见, data3 可能是 None 或实例。到目前为止一切顺利。
现在,让我们再次尝试创建一些其他实例(困难的方式):
d2 = my_data(4,5,d1)
d1 = my_data(1,2,None)
d3 = my_data(7,8,d2)
这种情况下会出现 NameError 异常,因为显然在行 d2 = my_data(4,5,d1), d1 尚未定义。
所以,问题来了:我想创建 data3 应该为 None 或实例的实例。 如果 data3 是 None 或存在的实例,没问题。 但如果 data3 引用了一个不存在的实例,我希望创建该实例。
例如:d2 = my_data(4,5,d1)
如果 d1 不存在,我想作为一个虚拟实例 d1 = my_data(None,None,None) 被启动,然后 d2 也被启动
我试过了,但似乎没有成功:
class my_data():
def __init__(self,data1,data2,data3):
self.data1 = data1
self.data2 = data2
try:
self.data3 = data3
except:
data3 = my_data(None,None,None)
self.data3 = data3
问题 B:
假设我们以某种方式创建了类的一些实例 (d1,d2,d3,...)。如何将实例存储在类内的列表中,以便在该类中创建的每个实例都包含在列表中?
类似 my_data.my_list() 这将产生 [d1, d2, d3, ...]
任何想法将不胜感激
【问题讨论】:
-
my_data构造函数未传递名称d1。它传递了变量d1所引用的对象。如果d1没有引用任何内容,则NameError会在构造函数对其执行任何操作之前发生。