Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/300.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 从类返回对象,打印并迭代_Python_Class - Fatal编程技术网

Python 从类返回对象,打印并迭代

Python 从类返回对象,打印并迭代,python,class,Python,Class,当我想从类中返回对象,同时可以打印这个结果时,我应该怎么做 我这样做: class Engine: def __init__(self, mylist): self._mylist = list(mylist) def __str__(self) -> str: return ','.join(el.__str__() for el in self._mylist) def __repr__(self): retu

当我想从类中返回对象,同时可以打印这个结果时,我应该怎么做

我这样做:

class Engine:
    def __init__(self, mylist):
        self._mylist = list(mylist)

    def __str__(self) -> str:
        return ','.join(el.__str__() for el in self._mylist)

    def __repr__(self):
        return self._mylist
但当我这样做的时候:

p = Engine(lst)
print(p)

for x in p:
   print("Element", x)
我得到:

element1, element2, element3

我应该怎么做才能打印这个结果,并像对象一样对它进行迭代?

您可以引用其中一个类变量使其工作。默认情况下,不能迭代整个对象。正确的方法是遍历您传递的列表,它现在是一个对象变量。如果您运行以下命令,它将起作用:

lst = [1, 2, 3, 4, 5]

p = Engine(lst)

print(p)

for ix in p._mylist:
   print("Element", ix)
但我猜您正在寻求另一种解决方案,因为您将列表命名为mylist,这通常意味着不应该从外部访问此变量

因此,您可以将对象本身转换为iterable。为此,需要定义
\uu iter\uu
dunder方法,并在将其视为迭代器时定义其行为

    def __iter__(self):
        return iter(self._mylist)

您可以引用其中一个类变量使其工作。默认情况下,不能迭代整个对象。正确的方法是遍历您传递的列表,它现在是一个对象变量。如果您运行以下命令,它将起作用:

lst = [1, 2, 3, 4, 5]

p = Engine(lst)

print(p)

for ix in p._mylist:
   print("Element", ix)
但我猜您正在寻求另一种解决方案,因为您将列表命名为mylist,这通常意味着不应该从外部访问此变量

因此,您可以将对象本身转换为iterable。为此,需要定义
\uu iter\uu
dunder方法,并在将其视为迭代器时定义其行为

    def __iter__(self):
        return iter(self._mylist)

该代码无法运行。您可以包含变量定义吗?FWIW,您的
\uuuu repr\uuuu
应该返回一个字符串,而不是一个列表…该代码不会运行。您可以包括变量定义吗?FWIW,您的
\uuuu repr\uuuuuu
应该返回一个字符串,而不是一个列表…请注意,您不应该养成访问对象私有属性的习惯,如
p.\u mylist
…非常正确,我在讲话时添加了更多细节请注意,您不应该养成访问对象私有属性的习惯,如
p._mylist
…非常正确,我在讲话时添加了更多细节
1,2,3,4,5
Element 1
Element 2
Element 3
Element 4
Element 5