Python - 如何将实例变量设置为 Class 变量列表中的数字

Python - How to set an instance variable to a number in a Class variable list

关于我需要对下面的方法增加做什么的任何提示,应该根据 Class 变量列表引擎大小中可用的值增加我拥有的引擎大小变量?

例如如果我将 self.engine 设置为 1.6,我如何检查 Class 变量列表 engine_sizes 并找到下一个最大的引擎大小并将其设置为那个。

下面是我目前的代码:

class Car(object):
    engine_sizes = [1.1, 1.6, 1.8, 1.9]

    def __init__(self, make, model, engine):
       if engine not in self.engine_sizes:
        raise ValueError("%s is not a valid engine size." % engine)

        self.__make = make
        self.__model = model
        self.style = style
        self.engine = engine

     def increase(self):
        if self.engine == max(self.engine_sizes):
            print("Engine is too big to increase")
        else:
            self.engine = next(self.engine_sizes )
            print("Engine Size Updated")

最快的解决方法是

self.engine = next(self.engine_sizes )

尝试

self.engine = Car.engine_sizes[Car.engine_sizes.index(self.engine) + 1]

一般来说,您最好将引擎索引存储在 class 中并提供 @property 以获得引擎大小。如果您有许多引擎尺寸,这会更有效率。不过,对于四个人来说,上面的修复应该没问题。

您不能按照编写代码的方式执行此操作,原因有几个。一个是,如果您将 engine_sizes 设为 class 变量,则 class 的所有实例将共享对同一对象的引用。但更重要的是,因为 list 对象是 可迭代的 ,但它们不是 迭代器

您可以尝试这样的操作:

class Car(object):
    engine_sizes = [1.1, 1.6, 1.8, 1.9]

    def __init__(self, make, model, engine):
       if engine not in self.engine_sizes:
           raise ValueError("%s is not a valid engine size." % engine)

        self.__make = make
        self.__model = model
        self.style = style
        self.engine = engine

     def increase(self):
        if self.engine == max(self.engine_sizes):
            print("Engine is too big to increase")
        else:
            idx = self.engine_sizes.index(self.engine)
            self.engine = self.engine_sizes[idx + 1]
            print("Engine Size Updated")