Python 将在一个列表中找到的对象的属性传递给另一个列表

Python 将在一个列表中找到的对象的属性传递给另一个列表,python,list,Python,List,我碰巧在一个项目中工作,根据客户的需要,我创建了许多对象(一个类),然后这些对象保存在一个列表中,然后创建的对象的属性必须保存在另一个列表中,以便在txt文件中打印它们。我已经能够创建多个对象并将它们保存在一个列表中,但我无法访问它们拥有的属性并将它们保存在另一个列表中 对象的创建: list_obj = [] for i in range (10): obj = sensorUltrasonido("verde", 0, 3) list_obj.appen

我碰巧在一个项目中工作,根据客户的需要,我创建了许多对象(一个类),然后这些对象保存在一个列表中,然后创建的对象的属性必须保存在另一个列表中,以便在txt文件中打印它们。我已经能够创建多个对象并将它们保存在一个列表中,但我无法访问它们拥有的属性并将它们保存在另一个列表中

对象的创建:

list_obj = [] 
for i in range (10):
    obj = sensorUltrasonido("verde", 0, 3)
    list_obj.append(obj)

现在,问题是如何保存在另一个列表中创建的10个对象的属性或访问它们?

因为您使用对象映射类中的参数。最好用神奇的方法。调用dict,它将返回对象中参数的字典。可用于获取所需的参数

class MyClass(object):
    class_var = 1

    def __init__(self, i_var):
        self.i_var = i_var

foo = MyClass(2)
bar = MyClass(3)

print MyClass.__dict__
print foo.__dict__
print bar.__dict__

产出将是

{'__module__': '__main__', 'class_var': 1, '__dict__': <attribute '__dict__' of 'MyClass' objects>, '__weakref__': <attribute '__weakref__' of 'MyClass' objects>, '__doc__': None, '__init__': <function __init__ at 0x0000000004E55CF8>}
{'i_var': 2}
{'i_var': 3}
{code>模块:''u_________','u______','u___模块:','u____':无','u___init_':}
{'i_var':2}
{'i_var':3}

希望输出可能有帮助,因为您正在使用对象映射类中的参数。最好用神奇的方法。调用dict,它将返回对象中参数的字典。可用于获取所需的参数

class MyClass(object):
    class_var = 1

    def __init__(self, i_var):
        self.i_var = i_var

foo = MyClass(2)
bar = MyClass(3)

print MyClass.__dict__
print foo.__dict__
print bar.__dict__

产出将是

{'__module__': '__main__', 'class_var': 1, '__dict__': <attribute '__dict__' of 'MyClass' objects>, '__weakref__': <attribute '__weakref__' of 'MyClass' objects>, '__doc__': None, '__init__': <function __init__ at 0x0000000004E55CF8>}
{'i_var': 2}
{'i_var': 3}
{code>模块:''u_________','u______','u___模块:','u____':无','u___init_':}
{'i_var':2}
{'i_var':3}

希望输出可能有帮助

您需要创建第二个列表,并简单地将属性附加到该列表中,可以通过调用
dir(obj)
访问这些属性。我们将忽略私有属性,不包括以“\u1”开头的属性。例如:

list_obj = []  
list_attrs = []
for i in range (10):
    obj = sensorUltrasonido("verde", 0, 3)
    list_obj.append(obj)
    attrs = [attr for attr in dir(obj) if not str(attr).startswith("_")]
    list_attrs.append(attrs)
之后,您可以使用列表写入文本文件

请注意,与存储两个满是
[obj,…]
[attrs,…]
的列表不同,一个变体是有一个
[(obj,attrs),…]
的列表,因为这样这些元素之间的关系就更清晰了

现在,如果需要存储属性名称和值,我们将使用字典,如下所示:

attrs = {attr: getattr(obj, attr) for attr in dir(obj) if not str(attr).startswith("_")}
为了进行测试,我创建了一个类:

class sensorUltrasonido():
    def __init__(self, x, y, z):
        self.x = x
        self.y = y
        self.z = z
打印(列表属性)
为我们提供了:

[{'x': 'verde', 'y': 0, 'z': 3}, {'x': 'verde', 'y': 0, 'z': 3}, {'x': 'verde', 'y': 0, 'z': 3}, {'x': 'verde', 'y': 0, 'z': 3}, {'x': 'verde', 'y': 0, 'z': 3}, {'x': 'verde', 'y': 0, 'z': 3}, {'x': 'verde', 'y': 0, 'z': 3}, {'x': 'verde', 'y': 0, 'z': 3}, {'x': 'verde', 'y': 0, 'z': 3}, {'x': 'verde', 'y': 0, 'z': 3}]

您需要创建第二个列表,只需将属性附加到该列表中,即可通过调用
dir(obj)
访问这些属性。我们将忽略私有属性,不包括以“\u1”开头的属性。例如:

list_obj = []  
list_attrs = []
for i in range (10):
    obj = sensorUltrasonido("verde", 0, 3)
    list_obj.append(obj)
    attrs = [attr for attr in dir(obj) if not str(attr).startswith("_")]
    list_attrs.append(attrs)
之后,您可以使用列表写入文本文件

请注意,与存储两个满是
[obj,…]
[attrs,…]
的列表不同,一个变体是有一个
[(obj,attrs),…]
的列表,因为这样这些元素之间的关系就更清晰了

现在,如果需要存储属性名称和值,我们将使用字典,如下所示:

attrs = {attr: getattr(obj, attr) for attr in dir(obj) if not str(attr).startswith("_")}
为了进行测试,我创建了一个类:

class sensorUltrasonido():
    def __init__(self, x, y, z):
        self.x = x
        self.y = y
        self.z = z
打印(列表属性)
为我们提供了:

[{'x': 'verde', 'y': 0, 'z': 3}, {'x': 'verde', 'y': 0, 'z': 3}, {'x': 'verde', 'y': 0, 'z': 3}, {'x': 'verde', 'y': 0, 'z': 3}, {'x': 'verde', 'y': 0, 'z': 3}, {'x': 'verde', 'y': 0, 'z': 3}, {'x': 'verde', 'y': 0, 'z': 3}, {'x': 'verde', 'y': 0, 'z': 3}, {'x': 'verde', 'y': 0, 'z': 3}, {'x': 'verde', 'y': 0, 'z': 3}]

我不完全清楚你的意思,但根据你的措辞,我建议如下。每个对象的init函数中都可以有一个列表变量

class foo:
  def __init__(self, *args):

     self.argument_list = []
     for items in *args:
        self.argument_list.append(items)
因此,传入参数的所有数据都可以保存到对象的列表中。 然后,当您创建一个新对象时,您总是可以将其附加到全局列表中

object_arguments = []

F = Foo(Args)
object_arguments.append(F)
要访问该数组中对象的参数,只需

object_arguments.argument_list[]
对于文件,您可以执行以下操作

file = open("arguments.txt","w")


for items in object_arguments:
  
     file.write(items.argument_list)

file.close()

我不完全清楚你的意思,但根据你的措辞,我建议如下。每个对象的init函数中都可以有一个列表变量

class foo:
  def __init__(self, *args):

     self.argument_list = []
     for items in *args:
        self.argument_list.append(items)
因此,传入参数的所有数据都可以保存到对象的列表中。 然后,当您创建一个新对象时,您总是可以将其附加到全局列表中

object_arguments = []

F = Foo(Args)
object_arguments.append(F)
要访问该数组中对象的参数,只需

object_arguments.argument_list[]
对于文件,您可以执行以下操作

file = open("arguments.txt","w")


for items in object_arguments:
  
     file.write(items.argument_list)

file.close()

我不确定我是否理解这个问题。你是指传递给构造函数的参数,还是对象的属性?谢谢你的回答。是的,我理解这一点,但我不知道如何访问对象的参数以将它们保存在另一个列表中。有什么想法吗?你有10个相同的对象(除非构造函数中有一些随机性)…抱歉,这不是参数,而是你提到的对象的属性。你可以通过执行
obj.attribute
访问属性。你试过了吗?如果需要所有属性,可以使用
vars(obj)
。再说一遍,我看不出有什么意义,因为你有10个完全相同的对象。我不确定我是否理解这个问题。你是指传递给构造函数的参数,还是对象的属性?谢谢你的回答。是的,我理解这一点,但我不知道如何访问对象的参数以将它们保存在另一个列表中。有什么想法吗?你有10个相同的对象(除非构造函数中有一些随机性)…抱歉,这不是参数,而是你提到的对象的属性。你可以通过执行
obj.attribute
访问属性。你试过了吗?如果需要所有属性,可以使用
vars(obj)
。再说一次,我不认为这有什么意义,因为你只是有10个相同的对象。谢谢你的帮助,我要看看代码,试着理解它。事实上,我已经使用python两天了,我错过了很多东西。写得不好是因为我不是一个以英语为母语的人,为写得不好感到抱歉不必担心:)这个网站上的每个人都愿意帮助,任何时候都是学习编程的好时机,祝你编程旅途好运!非常感谢您的帮助,我将查看代码并尝试理解它,事实上,我已经使用python两天了,我错过了很多东西。写得不好是因为我不是一个以英语为母语的人,很抱歉写得不好不用担心:)这个网站上的每个人都愿意帮助,任何时候都是学习编程的好时机,我希望