使用self .__ dict__来改变模型类

时间:2014-08-11 15:43:01

标签: python dictionary self

我偶然发现了一些实现REST API的Python代码,它依赖于(即获取/设置)类这样的类:

class Model(
    def __init__(self, foo=1, bar=0, baz=0):
        self.foo = foo
        self.bar = bar
        self.baz = baz


    def get_api(self):
        return self.__dict__.keys()


    def set_parameters(self, parameters):
        for p in parameters.keys():
            if p in self.__dict__.keys():
                self.__dict__[p] = parameters[p]

基本上,REST API是"内置"来自get_api(),因此它与班级“1:1”匹配。实例属性。

是否考虑过#34;良好做法"在Python世界? (看起来有些黑客对我来说)

如果没有,在类中存储模型的更好方法是什么?

1 个答案:

答案 0 :(得分:0)

使用的方法很好,但是您有一些术语错误:

self.foo等属于instance属性 - 也就是说,您只会在Model的实例上看到它们:

>>> Model.foo  # class access
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
AttributeError: type object 'Model' has no attribute 'foo'

>>> m = Model()  # create an instance
>>> m.foo        # instance access
1

properties是非常特定的属性类型:基本上,它们是由代码(this answer has more details)支持的数据位。