【问题标题】:Python - How to set an instance variable to a number in a Class variable listPython - 如何将实例变量设置为类变量列表中的数字
【发布时间】:2019-04-20 14:31:40
【问题描述】:

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

例如如果我将 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")

【问题讨论】:

  • 请查看您的缩进并提供具体问题的详细信息。

标签: python-3.x next class-variables


【解决方案1】:

最快的解决方法是代替

self.engine = next(self.engine_sizes )

试试

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

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

【讨论】:

    【解决方案2】:

    由于几个原因,您无法按照编写代码的方式执行此操作。一种是如果您将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")
    

    【讨论】:

    • 太棒了。谢谢解释
    猜你喜欢
    • 2019-02-01
    • 1970-01-01
    • 2013-06-09
    • 2015-06-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-02-12
    相关资源
    最近更新 更多