代码之家  ›  专栏  ›  技术社区  ›  user225312

在python中创建对象列表

  •  14
  • user225312  · 技术社区  · 14 年前

    如何在Python中创建对象列表(类实例)?

    或者这是坏设计的结果?我需要这个,因为我有不同的对象,我需要在以后的阶段处理它们,所以我将继续将它们添加到列表中,稍后再调用它们。

    7 回复  |  直到 5 年前
        1
  •  38
  •   Umair Ahmad yanjost    8 年前

    存储对象实例列表非常简单

    class MyClass(object):
        def __init__(self, number):
            self.number = number
    
    my_objects = []
    
    for i in range(100):
        my_objects.append(MyClass(i))
    
    # later
    
    for obj in my_objects:
        print obj.number
    
        2
  •  4
  •   Chris B.    14 年前

    python教程讨论 how to use lists .

    存储类列表与存储任何其他对象没有区别。

    def MyClass(object):
        pass
    
    my_types = [str, int, float, MyClass]
    
        3
  •  2
  •   A. Jesse Jiryu Davis    14 年前

    在Python中,类的名称引用类实例。考虑:

    class A: pass
    class B: pass
    class C: pass
    
    lst = [A, B, C]
    
    # instantiate second class
    b_instance = lst[1]()
    print b_instance
    
        4
  •  1
  •   Art Hill    6 年前

    我有一些粗俗的答案,可能很糟糕…但我在这一点上的经验很少。

    一种方式:

    class myClass():
        myInstances = []
        def __init__(self, myStr01, myStr02):
            self.myStr01 = myStr01
            self.myStr02 = myStr02
            self.__class__.myInstances.append(self)
    
    myObj01 = myClass("Foo", "Bar")
    myObj02 = myClass("FooBar",  "Baz")
    
    for thisObj in myClass.myInstances:
        print(thisObj.myStr01)
        print(thisObj.myStr02)
    

    一种实现此目的的黑客方法:

    import sys
    class myClass():
        def __init__(self, myStr01, myStr02):
            self.myStr01 = myStr01
            self.myStr02 = myStr02
    
    myObj01 = myClass("Foo", "Bar")
    myObj02 = myClass("FooBar",  "Baz")
    
    myInstances = []
    myLocals = str(locals()).split("'")
    thisStep = 0
    for thisLocalsLine in myLocals:
        thisStep += 1
        if "myClass object at" in thisLocalsLine:
            print(thisLocalsLine)
            print(myLocals[(thisStep - 2)])
            #myInstances.append(myLocals[(thisStep - 2)])
            print(myInstances)
            myInstances.append(getattr(sys.modules[__name__], myLocals[(thisStep - 2)]))
    
    for thisObj in myInstances:
        print(thisObj.myStr01)
        print(thisObj.myStr02)
    

    另一个更聪明的黑客:

    import sys
    class myClass():
        def __init__(self, myStr01, myStr02):
            self.myStr01 = myStr01
            self.myStr02 = myStr02
    
    myInstances = []
    myClasses = {
        "myObj01": ["Foo", "Bar"],
        "myObj02": ["FooBar",  "Baz"]
        }
    
    for thisClass in myClasses.keys():
        exec("%s = myClass('%s', '%s')" % (thisClass, myClasses[thisClass][0], myClasses[thisClass][1]))
        myInstances.append(getattr(sys.modules[__name__], thisClass))
    
    for thisObj in myInstances:
        print(thisObj.myStr01)
        print(thisObj.myStr02)
    
        5
  •  0
  •   Kooranifar    8 年前

    如果“我的对象”列表是要在其中存储对象的列表,而“我的对象”是要存储的对象,请使用以下结构:

    my_list.append(my_object)
    
        6
  •  0
  •   cryptoplex    5 年前

    可以使用列表理解在一行中创建对象列表。

    class MyClass(object): pass
    
    objs = [MyClass() for i in range(10)]
    
    print(objs)
    
        7
  •  -1
  •   Andy    14 年前

    我认为您在这里要做的是使用一个包含类实例的结构。我不知道在Python中命名结构的语法,但是在Perl中,我可以创建一个结构obj.id[x],其中x是一个递增整数。然后,我可以通过用数字引用这个结构来引用我需要的特定类实例。这是你想做的事情吗?