Python可变数量的属性

时间:2017-04-14 00:38:50

标签: python

我是新来的ptyhon我正在尝试做一些非常简单的事情,但我不能这样做。

我必须创建每次都具有不同数量的属性的对象。例如:

OBJECT A
    Attribute 1
    Attribute 2
    Attribute 3
OBJECT B
    Attribute 1
    Attribute 2

属性1将始终存在(具有不同的值,但对象中将至少有一个属性)。我创建了一个示例类:

class car():
    def__init__(self, Color, **kwargs):
        self.Color = Color 

        for key, value in kwargs.iteritems():
            setattr(self, key, value)

所以现在我必须调用构造函数,但由于属性的数量是可变的,我应该怎么做?

CAR1_ATTRIBUTES = (Passengers = 5, Tires = 4)
CAR2_ATTRIBUTES = (DriverName = "John", Tires = 4, DoorsNumber = 5)
CAR3_ATTRIBUTES = (DriverName = "Tom", Velocimeter = "Y", DoorsNumber = 4)

CarsList = []
for i in range(0,3):
    CarObject = Car("RED", RESTOFATTRIBUTES)
    CarsList.append(CarObject)

“RESTOFATTRBUTES”将是可变的(它可以是一个参数或1563 ......)

1 个答案:

答案 0 :(得分:0)

您可以传递任意数量的命名参数key = value,例如

Car("RED", Passengers = 5, Tires = 4)

它们将被视为字典kwargs的key : value对。或者直接传递字典:

RESTOFATTRIBUTES = {"Passengers": 5, "Tires": 4}
Car("RED", **RESTOFATTRIBUTES)

您不必使用**语法。您也可以使用*语法。您定义函数def Car(color, *args):。在函数的主体中,args是一个元组,其中第一个元素对应于,例如,乘客,第二个元素对应于,例如,Tire等。您以这种方式调用Car

Car("RED", 5, 4)

RESTOFATTRIBUTES = (5, 4)
Car("RED", *RESTOFATTRIBUTES)

如果CAR功能的主体管理它,可能只有两个额外的属性。

这在某种程度上是重复的,但在这个问题的具体背景下提供答案并没有错。