从父类__bases__属性中动态设置基类类属性

时间:2017-12-20 12:22:57

标签: python

我对python比较陌生,并且想知道我是否正在做一些可能导致故障的事情(或者完全以错误的方式解决这个问题);从父__bases__属性中设置公共继承基类的类属性...

解释:我有六个派生类(A,B,C ......)都继承了一个名为LevelMixin的基类。

class A(LevelMixin):
....

class B(LevelMixin):
....

class C(LevelMixin):
....


class LevelMixin(object):
"""Contains all schema meta-info for a particular level"""

_unpickleable = False

def __getstate__(self):

    if LevelMixin._unpickleable:
         # modify state to hide private instance attributes
    else:
        state = self.__dict__.copy()

派生类在嵌套结构中实例化,因此A上的属性是B的实例,依此类推:

a=A(b=B(c=C(d=D())))

当需要挑选A的实例时,我希望子类LevelMixin的所有类都能访问相同的“unpickleable”属性(因此我可以设置一次而不是将其传递给代码,因为每个类都是实例化)。例如,a._unpickleable = True,a.b._unpickleable = True,a.b.c._unpickleable = True

为此,我通过以下方式动态访问了LevelMixin类属性:

    if unpickleable:    # override the Level class attribute
        A.__bases__[0]._unpickleable = True
    else:
        A.__bases__[0]._unpickleable = False

    schema.append(
        A(
            b=B(
                ...)
        )
    )

但这感觉很糟糕。对于已接受的答案here,已经提出了类似的方法,但这是正确的方法吗?

非常感谢提前!

0 个答案:

没有答案