Python初学者。对不起超级基本问题。
我想检查所有参数值,这样如果它是一个空字符串,我可以将值转换为None。
我想出了如何获取参数列表,但我无法弄清楚如何获取参数的值。
我现在拥有的是:
def __init__(self, first, middle, last):
# convert blank attributes to None
import inspect
args = inspect.getargspec(self.__init__)[0]
for arg in args:
print 'arg: ' + str(arg)
if arg == '':
arg = None
这会获取参数名称,但不会获取其值。我怎样才能掌握价值观?
谢谢!
答案 0 :(得分:3)
只有3个参数,不要打扰检查,只需直接引用它们,或使用全能参数*args
:
def __init__(self, *args):
args = [argument or None for argument in args]
您可以通过locals()
dictionary访问函数本地,但它只是只读的,您通常不使用它来设置默认值。
如果您确实需要通用方法,我会使用装饰器:
from functools import wraps
def reset_to_none(func):
@wraps(func)
def wrapper(*args, **kw):
args = [arg if not isinstance(arg, str) or arg else None for arg in args]
kw = {k: arg if not isinstance(arg, str) or arg else None for k, arg in kw.items()}
return func(*args, **kw)
return wrapper
然后将其应用于您的__init__
方法:
class SomeClass(object):
@reset_to_none
def __init__(self, first, middle, last):
# any of `first`, `middle` or `last` being empty strings will be set to `None`
答案 1 :(得分:2)
您可以编写一个decorator,将所有空字符串参数转换为None
:
from functools import wraps
def emptyToNoneParameters (f):
@wraps(f)
def inner (*args, **kwargs):
newArgs = [None if a == '' else a for a in args]
newKwargs = {k: None if v == '' else v for k, v in kwargs.items()}
return f(*newArgs, **kwargs)
return inner
class MyType:
@emptyToNoneParameters
def __init__ (self, first, middle, last):
print(first, middle, last)
x = MyType('a', '', '')
# prints: 'a', None, None