在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)快捷方式或制作方法?
答案 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有一个例子说明为什么我刚才所说的是一个应该避免的可怕想法。
(简短版本:它不适用于可变对象,并且处理它的解决方法不值得付出努力。)