如果未提供则默认生成 UUID 的类,如果提供了则验证/创建 UUID 对象str
。
import attr
from attrs import validators
from uuid import UUID, uuid1
def _validate(instance, attribute, value) -> None:
try:
if isinstance(value, str):
instance.uuid = UUID(value)
return
except Exception as e:
raise BadUUID() from e
@attr.s(slots=True)
class Private:
uuid = attr.ib(type=[str, UUID], validator=[validators.optional([validators.instance_of(UUID), validators.instance_of(str)]), _validate], default=uuid1())
它应该有和没有提供一个值:
print(Private())
print(Private('d283a713-9f4b-1c15-ab8d-8d95d7ce8999'))
在没有提供的情况下,它应该使用默认设置生成一个新的 UUID。
如果提供了值,则应对其进行验证并创建一个 UUID 对象。
我收到一个错误,因为它只会验证一个实例类型,要么str
要么UUID
。
如果我设置instance_of(UUID)
它只会在不提供值的情况下工作。
如果我将它设置为instance_of(str)
它只会str
在提供的情况下工作。
我做错了什么,有没有更好的方法来完成我正在寻找的东西?