Python 如何创建“单个”对象

Python 如何创建“单个”对象,python,object,Python,Object,我的任务其实很简单。也许我太习惯C++了,看不到我的错。 我有两门课和一张单子。 该列表应包括由class1构成的所有对象,而class1还包括class2的所有对象的列表。 因此,我们: All_Objects1 = [] # For class1 objects class class1 (object): All_Objects2 = [] # For class2 objects class class2 (object): name = "" nu

我的任务其实很简单。也许我太习惯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


非常感谢您的帮助。

在Python中,有些东西可能会出错,首先,您使用的是哪个版本的Python

我还没有在我的控制台上进行测试,但我想这是一个初始化问题,对于如何声明列表,我更建议使用一种更具python风格的方法,我的意思是,构建一个构造函数,并使用关键字self作为实例变量,如果这可行,我可以扩展我的答案,解释为什么会发生这种情况

在类1和类2中创建类似的方法:

def __init__(self, object_list=None) : # use corresponding classes attributes.  
    if self.name_of_your_variable:
           self.name_of_your_variable= [] # or proper value

根据您的类调整此选项,并让我知道,如果它有效,我一回到家就会用Python扩展它,有人可能会犯此错误,首先,您使用的是哪个版本的Python

我还没有在我的控制台上进行测试,但我想这是一个初始化问题,对于如何声明列表,我更建议使用一种更具python风格的方法,我的意思是,构建一个构造函数,并使用关键字self作为实例变量,如果这可行,我可以扩展我的答案,解释为什么会发生这种情况

在类1和类2中创建类似的方法:

def __init__(self, object_list=None) : # use corresponding classes attributes.  
    if self.name_of_your_variable:
           self.name_of_your_variable= [] # or proper value

根据您的类调整它,并让我知道,如果它有效,我一回到家就用Python扩展它,在任何函数之外声明的所有类成员都是静态成员。因此,它们由类中实例化的每个对象共享

您需要的是以下内容:

class class1 (object):
    def __init__(self):
        self.All_Objects2 = []  # For class2 objects

class class2 (object):
  def __init__(self):
        self.name = ""
        self.number = 0

对于Python,在任何函数之外声明的所有类成员都是静态成员。因此,它们由类中实例化的每个对象共享

您需要的是以下内容:

class class1 (object):
    def __init__(self):
        self.All_Objects2 = []  # For class2 objects

class class2 (object):
  def __init__(self):
        self.name = ""
        self.number = 0

你只需要初始化你的类。init,您只需要一个“所有对象”列表。下面是一个关于类的示例

class firstA():
    def __init__(self):
        self.All_Objects = []

class secondB():
    def __init__(self):
        self.name ="None"
        self.number = 0
当您调用该类时,将完成初始化:-这在python2/3中非常好

在类外初始化的任何内容都将被视为静态变量!因此,在您的示例中,所有对象列表就是一个例子


希望这能澄清你的疑问!祝你有愉快的一天。

你只需要初始化你的类。init,您只需要一个“所有对象”列表。下面是一个关于类的示例

class firstA():
    def __init__(self):
        self.All_Objects = []

class secondB():
    def __init__(self):
        self.name ="None"
        self.number = 0
当您调用该类时,将完成初始化:-这在python2/3中非常好

在类外初始化的任何内容都将被视为静态变量!因此,在您的示例中,所有对象列表就是一个例子


希望这能澄清你的疑问!祝你有愉快的一天。

尝试向类中添加init函数;我认为python可能不知道如何为它创建新的内存块:即使是一个空/空的init just write pass,作为唯一的命令也应该执行这个技巧。为什么要使用类外的第一个列表?为什么不初始化类?为什么不使用继承?All_Objects2=[]在所有对象中创建共享元素。使用uuu init_uuu函数创建self.All_Objects2=[]尝试向类添加一个init函数;我认为python可能不知道如何为它创建新的内存块:即使是一个空/空的init just write pass,作为唯一的命令也应该执行这个技巧。为什么要使用类外的第一个列表?为什么不初始化类?为什么不使用继承?All_Objects2=[]在所有对象中创建共享元素。使用uuu init_uuu函数创建self.All_Objects2=[]Trotzdem Danke:-Trotzdem Danke:-