自动保存构造函数参数

Mar*_*agh 3 python constructor

通常,类的构造函数将获取它的参数并将它们保存在实例上.例如:

class Example(object):
    def __init__(self, title='',backtitle='', height=20, width=50):
        self.title = title
        self.backtitle = backtitle
        self.height = height
        self.width = width
Run Code Online (Sandbox Code Playgroud)

这是重复的,所以我做了一个帮助函数来自动执行此操作:

from inspect import getargspec
def save_args(values):
    for i in getargspec(values['self'].__init__).args[1:]:
        values['self'].__dict__[i] = values[i]

class Example(object):
    def __init__(self, title='',backtitle='', height=20, width=50):
        save_args(vars())
Run Code Online (Sandbox Code Playgroud)

我的问题如下:

  • 这会因某些课程或课程而失败吗?
  • 它是可移植的,它是否适用于Jython等.它在python 2.7和3.2上适用于我
  • 有更简单的替代方案吗?
  • 那里有一个python包吗?

Mar*_*ers 5

当你的班级使用它时会失败__slots__.你可以setattr()改用:

from inspect import getargspec
def save_args(values):
    for i in getargspec(values['self'].__init__).args[1:]:
        setattr(values['self'], i, values[i])
Run Code Online (Sandbox Code Playgroud)

提供arguments关键字参数__init__当然是所有声明的槽.

否则,这应该适用于任何Python实现.

您可能对之前关于该主题的讨论感兴趣,该讨论引发了Python-ideas列表线程.