Python - 更新类属性(猴子修补?)?

时间:2016-06-15 08:34:43

标签: python openerp monkeypatching class-attribute

所以有一个名为Field的类,它有类属性_slots,这个属性是字典。

所以它看起来像这样(该类也使用自定义__metaclass__):

class Field(object):

  _slots = {
    'key1': False,
    'key2': None,
    ...
}

课程内容太大,无法在此处粘贴,因此我提供了指向该内容的链接,src

现在我需要在实例化这个类时,它将在该属性中包含我的自定义键/值对。

所以我尝试了这个(在我自己的模块中):

from openerp import fields

fields.Field._slots['custom_key'] = None

当我在此作业后打印时,它会显示我已设置此键/值对,但实际上在加载该类时,它永远不会得到我的custom_key。虽然如果我修补一些方法,它可以工作,但对于类属性它没有。是否有可能这样做(或者我在这里做错了什么?)?

虽然如果我用自己的简单类编写简单的测试场景,例如:

(f.py档案)

class F(object):
    _t = {'a': 1}

(其他python文件)

import f

f.F._t['b'] = 10

f_new = f.F()
print f_new._t

然后这个工作。

更新

我还在MetaField类中尝试了这个(直接修改代码),__metaclass用作Field的{​​{1}}(当Field类使用{{1}时仍被忽略}}:

_slots

0 个答案:

没有答案