Python - Как установить переменную экземпляра в число в списке переменных класса - PullRequest
0 голосов
/ 17 ноября 2018

Любые советы о том, что мне нужно сделать, чтобы увеличить метод, ниже которого следует увеличить переменную размера двигателя, которую я имею, основываясь на значениях, доступных в размерах двигателя списка переменных класса?

например. Если я установлю в self.engine значение 1.6, как я могу проверить список переменных класса 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")

Ответы [ 2 ]

0 голосов
/ 17 ноября 2018

Вы не можете сделать это так, как написали код, по нескольким причинам.Во-первых, если вы сделаете engine_sizes переменной класса, все экземпляры класса будут совместно использовать ссылку на один и тот же объект.Но что более важно, потому что 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")
0 голосов
/ 17 ноября 2018

Самое быстрое решение состоит в том, чтобы вместо

self.engine = next(self.engine_sizes )

попробовать

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

Как правило, вам лучше просто сохранить индекс двигателя в классе и предоставить @property, чтобы получить объем двигателя.Это было бы более эффективно, если бы у вас было много размеров двигателя.Только для четырех исправление выше должно быть в порядке.

...