【问题标题】:Python3 / Creating multiple class objects with different arguments from a list?Python3 / 从列表中创建具有不同参数的多个类对象?
【发布时间】:2018-05-01 16:52:28
【问题描述】:

我想创建我的班级汽车的实例。如何从列表中为每辆 x 辆汽车添加参数?

argument_list = ['h','2','2','0','v','2','0','0'........etc]

car1 = car('h','2','2','0')
car2 = car('v','2','0','0')
car3 = car(............etc)

对每辆车都这样做太糟糕了:

car1 = car(*coordinate_list[0:4])
car2 = car(*coordinate_list[4:8])

【问题讨论】:

  • 您是否需要您的汽车对象为car1car2car3 或者它们可以是汽车对象的列表,例如car = []car[0] = car('h'...)?因为如果是这样,那么您可以非常简单地使用 for 循环。
  • 我需要它完全如图所示.. 不是列表

标签: python-3.x list class


【解决方案1】:

您可以使用 for 循环和全局变量来完成此操作。

class Car:
    def __init__(self, *args, **kwargs):
        print(args, kwargs)
        self.attr1 = args[0]
        self.attr2 = args[1]
        self.attr3 = args[2]
        self.attr4 = args[3]

argument_list = list(range(32)) #enough arguments for 8 cars

# the // operator guarantees integer division
num_cars = len(argument_list)//4 
car_list = []
for i in range(num_cars-1):
    # [i*4:(i+1)*4] will grab 4 items at a time from argument list
    # the asterisk before it *argument_list[i*4:(i+1)*4] unpacks the list so they can be arguments for init  
    car_list.append(Car(*argument_list[i*4:(i+1)*4]))


for car in car_list:
    print(car.attr1, car.attr2, car.attr3, car.attr4)


for i, car in enumerate(car_list):
    # accesses global variables and adds whatever variable we want by name
    globals()['car' + str(i)] = car 

print(car1.attr1)

print(car2.attr2)

【讨论】:

  • OP 明确表示她/他需要它与所示的变量,而不是列表。
  • 我的错。以前没见过。
猜你喜欢
  • 1970-01-01
  • 2012-07-16
  • 1970-01-01
  • 2012-12-13
  • 2019-03-17
  • 1970-01-01
  • 1970-01-01
  • 2018-07-05
  • 2017-12-30
相关资源
最近更新 更多