gpt4 book ai didi

python - 检查 Python 中函数/方法中参数的类型

转载 作者:太空宇宙 更新时间:2023-11-03 17:11:13 25 4
gpt4 key购买 nike

在Python中,我想检查传递给函数的参数的类型。

我写了两个实现:

class FooFloat(float):
pass

# Solution 1
def foo(foo_instance):
if type(foo_instance) is FooFloat:
raise TypeError, 'foo only accept FooFloat input'


# Solution 2
def foo(foo_instance):
assert type(foo_instance) is FooFloat, 'foo only accept FooFloat input'

在我看来,后者更容易阅读并且更少的样板代码。但是,它会抛出一个 AssertionError ,这不是我想引发的错误类型。

在这种更常见的情况下,是否有更好的第三种解决方案?

我正在考虑装饰器:

@argtype('foo_instance', FooFloat)
def foo(foo_instance):
pass

最佳答案

我喜欢这个想法并考虑在将来使用它。我实现的第三种解决方案如下,请尝试一下。

def argtype(arg_name, arg_type):
def wrap_func(func):
def wrap_args(*args, **kwargs):
if not isinstance(kwargs.get(arg_name), arg_type):
raise TypeError, '%s\'s argument %s should be %s type' % (func.__name__, arg_name, arg_type.__name__)
return func(*args, **kwargs)
return wrap_args
return wrap_func


@argtype('bar', int)
@argtype('foo', int)
def work(foo, bar):
print 'hello word'

work(foo='a', bar=1)

另外,我认为如果有继承的话,使用isinstance更合适。

关于python - 检查 Python 中函数/方法中参数的类型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34061492/

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