是否有一个简单设置属性的__init__的Python快捷方式?

时间:2016-11-11 10:24:16

标签: python python-2.7 class shortcut

在Python中有时会看到__init__这样的代码:

class SomeClass(object):
    def __init__(self, a, b, c, d, e, f, g):
        self.a = a
        self.b = b
        self.c = c
        self.d = d
        self.e = e
        self.f = f
        self.g = g

特别是如果有问题的类纯粹是没有行为的数据结构。是否有(Python 2.7)快捷方式或制作方法?

4 个答案:

答案 0 :(得分:11)

您可以使用Alex Martelli的Bunch recipe

class Bunch(object):
    """
    foo=Bunch(a=1,b=2)
    """
    def __init__(self, **kwds):
        self.__dict__.update(kwds)

答案 1 :(得分:8)

您可能会发现attrs库很有帮助。以下是文档overview page中的示例:

>>> import attr
>>> @attr.s
... class C(object):
...     x = attr.ib(default=42)
...     y = attr.ib(default=attr.Factory(list))
...
...     def hard_math(self, z):
...         return self.x * self.y * z
>>> i = C(x=1, y=2)
>>> i
C(x=1, y=2)

答案 2 :(得分:4)

不确定

Class SomeClass(object):
    def __init__(self, **args):
        for(k, v) in args.items():
            setattr(self, k, v)

v = SomeClass(a=1, b=2, c=3, d=4)

它会让您的代码难以理解。

祝你好运。

答案 3 :(得分:2)

您可以使用__new__方法创建一个类,将任何类属性复制到对象,然后继承该对象。

http://www.oreilly.com/programming/free/how-to-make-mistakes-in-python.csp有一个例子说明为什么我刚才所说的是一个应该避免的可怕想法。

(简短版本:它不适用于可变对象,并且处理它的解决方法不值得付出努力。)