Python:获取上级类中列出的类元素的属性

时间:2017-07-24 07:47:06

标签: python

我在python中遇到以下问题。我声明了一个带有一些属性的类元素和带有列表 population 的类 network

现在我使用类元素的对象填充网络:e1,e2和e3。当我尝试获取填充网络的元素的属性时,我收到错误。

你能帮助我理解这些问题吗?

import sys

class element:
    def __init__(self):
        self.property = 1

    def getProperty(self):
        return(self.property)

class network:
    def __init__(self):
        self.population = []

    def addElement(self, element):
        self.population.append([element])

    def getElementProp(self):
        for i in range(0, len(self.population)):
            #print(self.population[i])
            print(self.population[i].getProperty())

print(sys.version_info)

e1 = element()
e2 = element()
e3 = element()

net = network()
net.addElement(e1)
net.addElement(e2)
net.addElement(e3)

net.getElementProp()

**Output:**

line 20, in getElementProp
    print((self.population[i]).getProperty())
AttributeError: 'list' object has no attribute 'getProperty

1 个答案:

答案 0 :(得分:4)

您正在追加包含element实例的列表对象,而您应该将实例直接附加到population列表中:

def addElement(self, element):
    self.population.append(element)

您还可以expand您的方法同时获取一个或多个元素,而无需重复调用:

def addElements(self, *elements):
    self.population.extend(elements)

...

net = network()
net.addElements(e1, e2, e3)

更重要的是,在您的getElementProp方法中,更多Pythonic直接迭代元素,而不是将range(len(...))与后面的列表索引一起使用:

def getElementProp(self):
    for e in self.population:
        print(e.getProperty())