2017-05-25 56 views
1

我想创建4个类Tire实例,并将列表中的实例保存在列表中(All_Tires)并通过每个实例迭代(使用for循环)并打印成员每个实例。将类实例保存在python列表中并迭代每个实例

class Tire(): 
    __identifier=0 
    __temperature=0 
    __pressure=0 
    __pressure_position=0 
    __temperature_position=0 
    __pressure_font=0 
    __temperature_font=0 
    __background_area =0  
    __color=0 

    def __init__(self,fourbyteid,backarea,presspos,temppos,press=0,temp=0,bkcolor=GREEN): 
     self.__identifier=fourbyteid 
     self.__temperature=temp 
     self.__pressure=press 
     self.__pressure_position=presspos 
     self.__temperature_position=temppos 
     self.__background_area=backarea 
     self.__color=bkcolor 

from tire import Tire 

class ScreenArea(object):  
    def __init__(self,x,y): 
     self.w=x 
     self.h=y 

# Set the width and height of the screen [width, height] 
ssize = ScreenArea(320,240) 


FL = Tire("0d224bff", 
      (0,0,ssize.w/2,ssize.h/2), 
      (ssize.w*1/8, ssize.h/4), 
      (ssize.w*1/8, ssize.h/4)) 
FR = Tire("0d224bf4", 
      (ssize.w/2,0,ssize.w/2,ssize.h/2), 
      (ssize.w*3/4, ssize.h/4), 
      (ssize.w*3/4, ssize.h/4)) 
RL = Tire("0d2262b9", 
      (0,ssize.h/2,ssize.w/2,ssize.h/2), 
      (ssize.w*1/8, ssize.h*3/4), 
      (ssize.w*1/8, ssize.h*3/4)) 
RR = Tire("0d22622a", 
      (ssize.w/2,ssize.h/2,ssize.w/2,ssize.h/2), 
      (ssize.w*3/4, ssize.h*3/4), 
      (ssize.w*3/4, ssize.h*3/4)) 

All_Tires=[FL,FR,RL,RR] 
print All_Tires 
for tire in All_Tires: 
    print tire.__pressure 

我希望print语句输出一个 “0”,而不是收到错误消息“AttributeError的:轮胎实例没有属性 '__pressure'

回答

5

属性名称与两个主要的下划线(不超过一个尾部下划线)将会是mangled,并且随后在类定义之外成为(大部分)不可访问的。如果您希望能够从任何一个e,不要用两个主要的下划线来命名它。

如果你改变你的类定义:

class Tire(): 
    def __init__(self,fourbyteid,backarea,presspos,temppos,press=0,temp=0,bkcolor=GREEN): 
     self.identifier=fourbyteid 
     self.temperature=temp 
     self.pressure=press 
     self.pressure_position=presspos 
     self.temperature_position=temppos 
     self.background_area=backarea 
     self.color=bkcolor 

而且你的print语句:

for tire in All_Tires: 
    print tire.pressure 

...那么你的输出就会

[<__main__.Tire instance at 0x02986260>, <__main__.Tire instance at 0x02986288>, <__main__.Tire instance at 0x029862B0>, <__main__.Tire instance at 0x029862D8>] 
0 
0 
0 
0 
+0

如果无法确定是什么你正在做或应该做什么,不要弄乱名字。 – timgeb

+1

有关此行为的详细信息:https://docs.python.org/2/tutorial/classes.html#private-variables-and-class-local-references –