gpt4 book ai didi

python - 在 Python 中,如果给出错误的参数,则返回 “None” 而不是创建新实例

转载 作者:行者123 更新时间:2023-12-03 20:36:19 25 4
gpt4 key购买 nike

创建类的实例时,如果给出了错误的参数。我如何不创建一个新实例并返回引用,而是返回一个“无”

这是我的应用程序:
因为它有时被允许。我的应用程序是从整数列表构建树。我想在列表中使用 None 来表示一片叶子。所以我只想返回一个 None 而不是一个空的树节点。

最佳答案

这些答案大部分都不对。执行此操作的适当方法是在类的 __new__ 中验证您的参数。方法,并返回 None如果验证失败或 ins如果验证成功。

这就是你要找的:

import pytest # for testing


class ValidatedModel:
def __init__(self, *, name=None):
self.name = name

@classmethod
def _validate(cls, *args, **kwargs):
try:
assert not args
assert list(kwargs.keys()) == ['name']
assert len(kwargs['name']) > 5 and len(kwargs['name']) < 10
except AssertionError:
return False
return True

def __new__(cls, *args, **kwargs):
if cls._validate(*args, **kwargs):
return super().__new__(cls)


class TestValidatedModel:
def test_success(self):
vm = ValidatedModel(name='william')
assert isinstance(vm, ValidatedModel)

def test_kwarg_fail_unexpected_kwarg(self):
vm = ValidatedModel(name='william', gender='M')
assert vm is None

def test_kwarg_fail_name_length_short(self):
vm = ValidatedModel(name='bill')
assert vm is None

def test_kwarg_fail_name_length_long(self):
vm = ValidatedModel(name='william johnson')
assert vm is None

def test_no_name_kwarg(self):
vm = ValidatedModel()
assert vm is None

显然你可以替换 _validate方法与您自己的实现。

关于python - 在 Python 中,如果给出错误的参数,则返回 “None” 而不是创建新实例,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25354834/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com