我在python中启动了面向对象的编程,在我的程序中,我决定将类实例存储在数组中,但我现在不知道如何访问类变量。
class apixel(object):
def __init__(self):
self.posx = random.randint(0, 300)
self.posy = random.randint(0, 200)
def do_i_exist():
print("Yes i do!")
p = [apixel] * 10
for obj in p:
obj.do_i_exist() #that works
print(obj.posx) #but that does not work
答案 0 :(得分:5)
问题是你需要实际实例化对象,否则永远不会调用__init__
。
尝试:
p = [apixel() for _ in range(10)]
Per Craig的评论如下,列表推导会将构造函数调用10次,因此您可以获得10个独立的对象。
但是,apixel
没有self.posx
的原因是您的代码从未调用过构造函数。您没有创建类的实例列表,而是创建对类定义的引用列表。
根据DanielPryden对您的OP的评论,您应该更改do_i_exist
方法的签名以接受self
,或将其注释为static
:
# as an instance method, which requires "self":
do_i_exist(self):
...
# as a static class method that is the same for all instances:
@staticmethod
do_i_exist():
... method body contains NO references to "self"