我在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
答案 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())