如果没有__iter_方法,如何使用Iterator



在Maya中尝试一些基本编程时,我遇到了;MitMeshPolygon";方法其描述为:"这个类是多边形曲面(网格(的迭代器">

(https://help.autodesk.com/view/MAYAUL/2016/ENU/?guid=__py_ref_class_open_maya_1_1_m_it_mesh_polygon_html)

这似乎正是我所需要的,所以我更多地研究了迭代器,根据我所知,迭代器本身应该是可迭代的,并且有一个iter方法。然而,当试图对它进行迭代时,python告诉我它是不可迭代的。

iterable = OpenMaya.MItMeshPolygon(dagPaths[0])            
while not iterable.isDone():
print(iterable)
print(dir(iterable))

<玛雅。OpenMaya.MItMeshPolygon;<在0x0000021A9159D630处滑动类型为"MItMeshPolygon*"的对象>gt;

[">class",">delattr',">dict",">dir',"doc‘,"eq>","formate’,">getattribute,">gt'','hashe','lt','module','ne','new`,'next'reduceeduce_ex‘,'
repr’,'setattrizeof'','<1strong>strubclasshook'','swig_destroyeakref,'center','className','count','currentItem',"geomChanged"、"getArea"、"geAxisAtUV"、"getColor"、"etColorIndex"、"getColorIndices"、"GET Colors"、"get ConnectedEdges"、《getConnectedFaces》、"getConnectedVertices"、"hasUVs","hasValidTriangulation"、"index"、"isConnectedToEdge"、"is ConnectedToFace"、"isConnectedTo Vertex"、"is凸面"、"isDone"、"isHoled"、"is Lamina"、"是平面"、"像星形"、"isUVReversed"、"next"、"normalIndex"、"numColors"、"numConnectedEdges"、"numConnectedFaces"、"numTriangles"、"onBoundary"、"point"、"polygonVertexCount"、"reset"、"setIndex"、"setUV","setUVs"、"tanctIndex"、"this"、"thistown"、"updateSurface"、"vertex Index"、"zeroArea"、"zeroUVArea"]

我想遍历所有的多边形;getArea";,但现在我不知道怎么做,我读到的所有东西都告诉我迭代器应该是可迭代的,但程序告诉我不是这样。我在这里不明白什么?如何使用这些方法来获取有关DagPath指示的对象的特定信息?

您的iterable有一个__next__方法。你可能可以做以下事情:

iterator = OpenMaya.MItMeshPolygon(dagPaths[0])            
try:
while True:
item = next(iterator)
...
except StopIteration:
pass

请注意,我已经将变量重命名为iterator,因为这似乎是一个更正确的术语。一个iterable确实应该有一个__iter__方法,调用iter(iterable)会将其变成一个执行实际迭代的迭代器,并有一个__next__方法。

事实上,iterator实际上可能是一个生成器,在移动中生成值(使用next()(,并且您将无法访问随机定位的值(例如,使用索引(,只能一个接一个地访问。那么您只需要一个__next()__方法。但没有看到MitMeshPolygon的实际代码,这只是猜测。

相关内容

  • 没有找到相关文章

最新更新