6

Python 类有一个名为init的初始化方法。初始化器经常接受几个复制到同名属性的参数。

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

这是很多工作,对我来说感觉“unpythonic”。有没有办法自动化这个过程?

我想也许这些方面的东西(下面的伪代码)可以工作:

for x in __init__.argument_names:
    exec('self.' + x + ' = ' + x)

我知道以这种方式调用 exec 不是一个好习惯。但也许 Python 开发团队已经创建了一种安全且等效的方法来自动执行此任务。

有什么建议么?

FS

4

2 回答 2

4

您可以使用检查模块来实现这一点(编辑:正如评论中正确指出的那样,您实际上不需要导入此模块):

class A:
    def __init__(self, a, b, c, d):
        args = locals().copy()
        del args['self']
        self.__dict__.update(args)

a = A(1,2,3,4)
print a.a
print a.b
print a.c
print a.d

python test.py
1
2
3
4

你可以把它包装成一个实用函数,只要记住不要取currentframebut getouterframes

于 2013-08-17T17:26:42.377 回答
1

这是一种方法:

class test:
    def __init__(self, *args):
        names = ['a', 'b', 'c', 'd']
        for name, arg in zip(names, args):
            setattr(self, name, arg)

t = test(5, 6, 7, 8)
print t.a, t.b, t.c, t.d
# 5 6 7 8
于 2013-08-17T17:19:15.760 回答