如何获取类成员值?

时间:2018-10-09 15:28:11

标签: python python-2.7

我有一堂课

该类的每个成员都有一个对应于两个坐标(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

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

(我使用了您的名字,但据我所知,CityVillage的名称比Building的名称更有意义,因为后者似乎持有一堆不同建筑物的坐标。)