python-3.x - 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
块捕获异常。但是由于您需要为创建该类的每个实例而这样做,因此最好为它创建一个汽车制造商函数。如下所示:
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')
推荐阅读
- html -
- r - 根据 R 中的条件保留先前的数据帧
- java - 尝试修改 toString() 方法以获得所需的结果
- react-native - react-native 脚本是如何工作的?
- azure - Create Azure Key Vault C# error remote server returned an error: (403) Forbidden
- arrays - 如何访问 vue js 列表中的对象元素(nuxt)
- .htaccess - 重定向部分 URL
- c# - C# 通过 azure 混合连接连接到 SQL Server 数据库
- java - 将SpringBoot配置添加为时如何使用maven-shade-plugin的“PropertiesMergingResourceTransformer”
标签 - chmod - 无法更改 /snap/inkscape/4019 目录的权限。chmod:更改“4019/”的权限:只读文件系统