Python类有一个名为 init 的初始化方法。初始化程序通常会接受多个复制到同名属性的参数。
def __init__(self, a, b, c, d):
self.a = a
self.b = b
self.c = c
self.d = d
这是很多工作,对我来说感觉“非语言”。有没有办法自动化这个过程?
我想也许沿着这些方面的东西(下面的伪代码)可以起作用:
for x in __init__.argument_names:
exec('self.' + x + ' = ' + x)
我知道以这种方式召唤执行官并不是一个好习惯。但也许Python开发团队已经创建了一种安全且等效的自动执行此任务的方法。
有什么建议吗?
FS
答案 0 :(得分:4)
您可以使用inspect模块实现此目的(编辑:正如评论中正确指出的那样,您实际上不需要导入此模块):
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
你可以把它包装成一个实用函数,只记得不要currentframe
而是getouterframes
。
答案 1 :(得分: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