ネストされたサブクラスから親変数にアクセスする最良の方法は何だろうと思っています。現在、デコレータを使用しています。
それが唯一/最良の方法ですか?
「config」ファイルでより多くのコードが必要になるため、親変数(ComponentModel.origin(以下を参照)など)に直接アクセスする必要はありません。問題のサブクラスが継承するクラスは?
私の現在のソリューションの簡単な例:
# defined in a big library somewhere:
class LibrarySerialiser(object):
pass
# defined in my module:
class ModelBase:
pass
class SerialiserBase(LibrarySerialiser):
def __init__(self, *args, **kwargs):
# could i some how get hold of origin here without the decorator?
print self.origin
super(SerialiserBase, self).__init__(*args, **kwargs)
def setsubclasses(cls):
cls.Serialiser.origin = cls.origin
return cls
# written by "the user" for the particular application as the
# configuration of the module above:
@setsubclasses
class ComponentModel(ModelBase):
origin = 'supermarket'
class Serialiser(SerialiserBase):
pass
ser = ComponentModel.Serialiser()
これは明らかに、すべての実際のロジックを欠いている些細な例であるため、多くのクラスが無効に見えますが、実際には必要です。