一种选择是定义默认值,然后从kwargs 或defaults 中选择密钥并将其推送到__dict__ 类中
这样,传递给类的任何不是字典中的键的参数都将被忽略。比如:
class A():
def __init__(self, **kwargs):
defaults = {'apples': 0, 'bananas': 1}
for key, val in defaults.items():
# Add value from kwargs if set, otherwise use default value
self.__dict__[key] = kwargs.get(key, val)
print(self.apples, self.bananas)
A()
# 0, 1
A(apples=5, bananas=6)
# 5, 6
A(apples=5, carrots=10)
# 5, 1
唯一的缺点是参数必须作为关键字 args 传递给类 - 普通 args 不起作用。
编辑 可以使用命令命令对 *args 执行相同操作的事实,但这更像是一种 hack:
class A():
def __init__(self, *args):
defaults = {'apples': 0, 'bananas': '1'}
for i, key in enumerate(defaults.keys()):
try:
# Get the value from args by index
self.__dict__[key] = args[i]
except IndexError:
# Use the default value
self.__dict__[key] = defaults[key]
print(self.apples, self.bananas)
A()
# 0, 1
A(5)
# 5, 1
A(5, 6, 7)
# 5, 6