如何防止 class 生成具有早期实例化中使用的属性的对象,但不停止代码,在 python
How to prevent a class to generate an object with an attribute used in an earlier instantiation, but not stop the code, in python
ids = []
class Car:
def __init__(self, id_no, *args):
if id_no in ids:
raise Exception('Duplicate id')
self.car_data = [id_no, *args]
ids.append(id_no)
car_1 = Car('WBA123', 'BMW', '530')
car_2 = Car('WBA123', 'Ford', 'Mustang')
car_3 = Car('WDB567', 'Mercedes', 'S400')
因此,不应创建 car_2 而是显示一条消息,但应创建 car_3。
如果您希望代码不停止,您应该使用 try-catch
块捕获异常。但是由于您需要为创建 class 的每个实例执行此操作,因此最好为它制作一个汽车制造商功能。类似以下内容:
ids = []
class Car:
def __init__(self, id_no, *args):
if id_no in ids:
raise Exception('Duplicate id')
self.car_data = [id_no, *args]
ids.append(id_no)
def build_car(*args):
try:
return Car(*args)
except Exception as e:
print(e)
car_1 = build_car('WBA123', 'BMW', '530')
car_2 = build_car('WBA123', 'Ford', 'Mustang')
car_3 = build_car('WDB567', 'Mercedes', 'S400')
ids = []
class Car:
def __init__(self, id_no, *args):
if id_no in ids:
raise Exception('Duplicate id')
self.car_data = [id_no, *args]
ids.append(id_no)
car_1 = Car('WBA123', 'BMW', '530')
car_2 = Car('WBA123', 'Ford', 'Mustang')
car_3 = Car('WDB567', 'Mercedes', 'S400')
因此,不应创建 car_2 而是显示一条消息,但应创建 car_3。
如果您希望代码不停止,您应该使用 try-catch
块捕获异常。但是由于您需要为创建 class 的每个实例执行此操作,因此最好为它制作一个汽车制造商功能。类似以下内容:
ids = []
class Car:
def __init__(self, id_no, *args):
if id_no in ids:
raise Exception('Duplicate id')
self.car_data = [id_no, *args]
ids.append(id_no)
def build_car(*args):
try:
return Car(*args)
except Exception as e:
print(e)
car_1 = build_car('WBA123', 'BMW', '530')
car_2 = build_car('WBA123', 'Ford', 'Mustang')
car_3 = build_car('WDB567', 'Mercedes', 'S400')