A flexible interface for any class would be when For example: All parameters and parameter names are put in an array. a=array('Username'->'peter','password'->'mypassword','e_mail'->'peter@nowhere.com'); An object is initialized like. user.init(a) The idea is that any object can be initialized by the same function init() with an array a as atribute. ''(this is a draft page) please add some ideas, fix my poor english'' ---- Python functions often do this. The ''keyword arguments'' may also be mixed with ''normal'' arguments and default values for the ''normal'' arguments, e.g.: >>> def foo(first=True, **kwargs): ... print "%s, %s" % (str(first), str(kwargs)) ... >>> foo() True, {} >>> foo(False) False, {} >>> foo(foo=1) True, {'foo': 1} >>> foo(foo=1, bar=2) True, {'foo': 1, 'bar': 2} >>> foo(False, foo=1, bar=2) False, {'foo': 1, 'bar': 2} The ''kwargs'' name refers to a dictionary, and dictionaries support default values for non-existent keys. This makes it possible to write code like: def foo(**kwargs): name = kwargs.get('name', "Default User") ... This is a relatively clean way of writing semi-polymorphic functions that support an arbitrary number of key=value pairs.