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")
关于我需要对下面的方法增加做什么的任何提示,应该根据 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")