我的任务其实非常简单。也许我太习惯c ++而不会看到我的错。 我有两个班级和一个清单。 该列表应包括由class1组成的所有对象,而class1还包括class2的所有对象的列表。 所以我们有:
All_Objects1 = [] # For class1 objects
class class1 (object):
All_Objects2 = [] # For class2 objects
class class2 (object):
name = ""
number = 0
现在我这样做:
# class1 objects:
obj1= class1()
obj2= class1()
# class2 objects
obj3 = class2()
obj3.name, obj3.number = "hello world", 10
obj4 = class2()
obj4.name, obj3.number = "hello europe", 20
obj5 = class2()
obj5.name, obj3.number = "hello asia", 30
obj6 = class2()
obj6.name, obj3.number = "hello africa", 40
# Attach object3 and object4 to object1
obj1.All_Objects2.append(obj3)
obj1.All_Objects2.append(obj4)
# Attach object5 and object6 to object2
obj2.All_Objects2.append(obj5)
obj2.All_Objects2.append(obj6)
# Attach obj1 and obj2 to the global list.
All_Objects1.append(obj1)
All_Objects1.append(obj2)
最后我做了一个打印,检查一切是否属于它所在的位置:
print (len(All_Objects1[0].All_Objects2)) # Should be 2.
for i in All_Objects1[0].All_Objects2:
print (i.name) # Should be world and europe.
print (len(All_Objects1[1].All_Objects2)) # Should be 2.
for i in All_Objects1[1].All_Objects2: # Should be asia, africa.
print (i.name)
现在的问题是,每个object2都在每个object1中,我不知道为什么。
在我的实际程序中,我做了类似这样的事情,实际上在c ++中有用:
#pseudo
for i in all_information:
if (i==Keyword):
currentObject = class1()
All_objects.append(currentObject)
然后我的列表中会有一些独立的对象。但在Python中,我认为我不知道如何覆盖" currentObject"。
非常感谢你的帮助。
答案 0 :(得分:2)
在Python中,有些人可能会犯这个错误,首先是你使用的Python版本是什么?
我还没有在我的控制台上进行过测试,但我猜这是一个初始化问题,对于你如何声明列表,我宁愿建议使用更多的Pythonic方法,我的意思是,构建一个构造函数并使用关键字{ {1}}例如变量,如果这有效,我可以扩展我的答案,解释为什么会发生这种情况。
在第1课和第2课中创建这样的方法:
self
让它适应你的课程并让我知道,如果它有效,一旦我回到家,我会延长它
答案 1 :(得分:1)
使用Python,在任何函数外声明的所有类成员都是静态成员。因此,它们由从类中实例化的每个对象共享。
您想要的是以下内容:
class class1 (object):
def __init__(self):
self.All_Objects2 = [] # For class2 objects
class class2 (object):
def __init__(self):
self.name = ""
self.number = 0
答案 2 :(得分:1)
你只需要初始化你的课程。 init ,您只需要一个所有对象列表。您可以在下面找到类的示例。
class firstA():
def __init__(self):
self.All_Objects = []
class secondB():
def __init__(self):
self.name ="None"
self.number = 0
当你调用类时,初始化将完成:-)这在python2 / 3中非常好。
无论你在课外初始化什么,都会被视为一个静态变量!因此,在您的示例中,例如All_Objects1列表。
希望这能澄清你的疑惑!祝你有愉快的一天。