2017-05-25 8 views
1

私は、クラスTireの4つのインスタンスを作成し、そのインスタンスをリスト(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

属性名とを持っていません2つの先頭のアンダースコア(末尾のアンダースコアが1つしかない)はmangledとなり、その後はクラス定義の外で(ほとんど)アクセスできなくなります。anywherから属性にアクセスできるようにしたい場合e、2つの主要なアンダースコアで名前を付けないでください。

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 –

関連する問題