在python中,我们常常这样定义一个类:

class TestClass(object):

    def __init__(self, a, b, c=None):
        self.a = a
        self.b = b
        self.c = c

这是没有任何问题的,但是为了做到通用和兼容性,我们最好加上_*args_ 和 **kwargs 参数,像下面这样:

class TestClass(object):

    def __init__(self, a, b, c=None, *args, **kwargs):
        self.a = a
        self.b = b
        self.c = c
        self.args = args
        self.kwargs = kwargs

这样做最显著的一个好处是,使用字典的传递关键字参数时,字典中添加类中没有的字段不会报错,这样程序的容错性大大提供

虽然这是一个比较简单的技巧,但是会避免实际使用中巨大的麻烦,例如:

#! /usr/bin/env python
# -*- coding: utf-8 -*-
import json


class TestClass(object):

    def __init__(self, a, b, c=None, *args, **kwargs):
        self.a = a
        self.b = b
        self.c = c
        self.args = args
        self.kwargs = kwargs


if __name__ == '__main__':
    json_str = '{"a": "a", "b": 2, "no_such_field": "test"}'
    t = TestClass(**json.loads(json_str))
    print t.__dict__