来自dict的docstrings的Python对象属性

时间:2015-12-01 22:18:06

标签: python python-2.7 oop object

在我的对象的init中,我想从iterable中创建对象属性。例如:

class MyClass(object):
    def __init__(self, parameters):
        attributes = ['name',
                      'memory',
                      'regressors',
                      'use_const']
        for attr_name in attributes():
            try:
                attr_val = parameters[attr_name]
            except KeyError:
                raise Error("parameters must contain {}".format(attr_name))
            setattr(self, attr_name, attr_val)

这让我可以获得我想要的属性。但是,与定义

相比,我失去了什么
@property
def name(self):
    """str: This class' name"""
    return self._name

是我现在没有得到属性的文档字符串。

我想拥有每个属性的文档字符串(对于我自动生成的文档),但我也想使用iterable而不必分别定义每个属性。例如,我可以将attributes转换为带有docstring作为值的dict,并动态设置属性的docstring吗?

我可以吃蛋糕吗?

1 个答案:

答案 0 :(得分:1)

您只能在上设置property个对象。您可以在循环中执行此操作,但必须在构建类时执行此操作,而不是实例。

只需生成property个对象:

def set_property(cls, name, attr, docstring):
    def getter(self):
        return getattr(self, attr)
    prop = property(getter, None, None, docstring)
    setattr(cls, name, prop)

for name in attributes:
    attr = '_' + name
    docstring = "str: This class' {}".format(name)
    set_property(SomeClass, name, attr, docstring)