On Sat, Mar 28, 2015 at 12:09 PM, Andrew Barnert firstname.lastname@example.org wrote:
class Person def __init__(self, name: str, age: int): self.name = name self.age = age
Of course it's trivial to wrap up that boilerplate if you're going to create 20 of these.
Here's a crazy thought: you could use functools.wraps() to abuse **kwargs.
def make_attributes(func): @functools.wraps(func) def inner(self, **args): self.__dict__.update(args) inner(self, **args) return inner
class Person: @make_attributes def __init__(self, *, name: str, age: int): pass
Thanks to wraps(), you still have your parameter names for introspection and help() and so on. Thanks to **args, you can do bulk operations on all the args.
It's a bit naughty (and it does preclude positional args, though a little bit more work in the decorator could support that too), but it would work.....