如何创建对象列表?

问题描述 投票:0回答:8

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

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

python list instance
8个回答
93
投票

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

class MyClass(object):
    def __init__(self, number):
        self.number = number

my_objects = []

for i in range(100):
    my_objects.append(MyClass(i))

# Print the number attribute of each instance

for obj in my_objects:
    print(obj.number)

23
投票

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

class MyClass(object): pass

objs = [MyClass() for i in range(10)]

print(objs)

5
投票

Python 教程讨论了如何使用列表

存储类列表与存储任何其他对象没有什么不同。

def MyClass(object):
    pass

my_types = [str, int, float, MyClass]

4
投票

在Python中,类名指的是类实例。考虑:

class A: pass
class B: pass
class C: pass

lst = [A, B, C]

# instantiate second class
b_instance = lst[1]()
print b_instance

2
投票

我有一些可能很糟糕的骇人听闻的答案......但我在这一点上的经验很少。

方式:

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)

1
投票

💎 我们为学生上课,我们想要列出学生名单,名单上的每一项都是学生💎

class student :
    def __init__(self,name,major):
        self.name=name
        self.major=major


students = []
count=int(input("enter number of students :"))
#Quantify
for i in range (0,count):
    n=input("please enter name :")
    m=input("please enter major :")
    students.append(student(n,m))
#access
for i in students:
    print (i.name,i.major)

0
投票

如果 my_list 是您要在其中存储对象的列表,而 my_object 是您要存储的对象,请使用此结构:

my_list.append(my_object)

-2
投票

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

© www.soinside.com 2019 - 2024. All rights reserved.