2017-05-25 57 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 –