Skip to main content
 首页 » 编程设计

python之将类实例保存在 python 列表中并遍历每个实例

2025年05月04日23dudu

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

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 

我希望打印语句输出“0”而不是得到错误消息“AttributeError:轮胎实例没有属性‘__pressure’

请您参考如下方法:

具有两个前导下划线(并且不超过一个尾随下划线)的属性名称将是 mangled ,随后在类定义之外变得(大部分)不可访问。如果您希望能够从任何地方访问某个属性,请不要使用两个前导下划线命名它。

如果您将类定义更改为:

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 

以及您的打印声明:

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