我有一堂课
该类的每个成员都有一个对应于两个坐标(x,y)的值
class Building:
h_armory = (284, 384)
h_dependance = (176, 320)
h_villa = (244, 188)
h_library = (410, 168)
h_storage = (504, 152)
h_garage = (624, 159)
h_workshop = (674, 211)
h_caveau = (562, 132)
h_entry = (693, 354)
h_wall = (401, 442)
h_guard = (612, 393)
现在,在一个函数中,我有一个for循环。
如何使用如下语法访问类成员值:
def myFunction():
cc = 0
for x in (Building):
coord = x[cc]
cc = cc + 1
答案 0 :(得分:0)
您在这里遇到设计问题。
首先,该类不记得分配给它的属性的顺序。其次,为了使 class (而不是实例)变得可迭代,我们将不得不投入元编程,这对于您想做的事情肯定是过大的。第三,您的类仅保留一堆没有任何方法的数据,这通常是浪费类。您也可以使用字典或集合模块中的OrderedDict
。
但是有更好的方法。提示为元组的提示,它可以更优雅地解决您的问题并且可迭代。为了简单起见,下面的演示仅使用三个属性。
>>> from collections import namedtuple
>>>
>>> Coordinate = namedtuple('Coordinate', 'location x y')
>>> Building = namedtuple('Building', 'h_armory h_dependence h_villa')
>>>
>>> my_building = Building(Coordinate('h_armory', 284, 384),
... Coordinate('h_dependance', 176, 320),
... Coordinate('h_villa', 244, 188))
>>>
>>> for location, x, y in my_building:
... print(location, x, y)
...
h_armory 284 384
h_dependance 176 320
h_villa 244 188
(我使用了您的名字,但据我所知,City
或Village
的名称比Building
的名称更有意义,因为后者似乎持有一堆不同建筑物的坐标。)