我对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,已经提出了类似的方法,但这是正确的方法吗?
非常感谢提前!