3つのインスタンス属性 'a'、 'b'、および 'c'を持つクラスがあり、プロパティセッターでそれぞれ初期化されているとします。さて、私のプロパティ 'b'の代入は、インスタンス変数 'a'の値を使うべきです。したがって、 'b'を初期化するには、 'a'をあらかじめ初期化しておく必要があります。プロパティは指定された順序で設定されていますか?
以下のコードに従うと、pythonはインスタンス 'a'を最初に設定し、次にインスタンス 'b'に行き、finnally 'c'に進みます。または、初期化がランダムな順序で行われる可能性があります変数を正常に初期化するには?
class Foo(object):
def __init__(self):
self.a = None
self.b = None
self.c = None
@property
def a(self):
return self._a
@a.setter
def a(self, value):
self._a = value
@property
def b(self):
return self._b
@b.setter
def b(self, value):
value = self.a
self._b = value
@property
def c(self):
return self._c
@c.setter
def c(self, value):
value = self.b
self._c = value
私は実際のケースでは困難を抱えているため、この質問を簡略化した形でお願いしています。その場合は、ログを使用して初期化の実行の実行を表示し、最初に 'a'の代わりに最後のプロパティ(この場合は 'c')を実行することで開始するように見えます。
あなたはそれぞれの設定者に 'print'を置くことで、これを簡単に実証することができます - はい、設定者は' __init__'が示唆する順序で呼び出されます。実際の問題を示す[mcve]を与えてください。 – jonrsharpe
@jonrsharpe:あなたが試した特定の時間だけ、その順序で実行されたセッターを実証することができます。これは一般的なものではありません。 – user2357112
私は問題の原因となっていたエラーを見つけることができました。それは実際に実行の順序ではなく、私が作っていたクラスの継承にありました。これを印刷物で見ることができるという最初の答えは正しいです。ありがとうございました –