異なるクラス間で変数を渡そうとしています。このタスクを達成するために、コードが次のようになるように情報クラス (ここでは「宣言」と呼ばれます) を作成しました:
クラス宣言():
def __init__(自己):
self.info1 = 999
self.info2 = 'something_else'
print ('宣言時')
クラスコントローラー():
def __init__(自己):
インスタンス = 宣言()
print ('頭文字',instance.info1,instance.info2)
修飾子 (宣言)
print ('MIDDLE',instance.info1,declaration.info1)
インスタンス = 宣言()
print ('最終番号',instance.info1)
クラス修飾子():
def __init__(self,aux):
印刷 ('MODIFIER')
self.info=aux
self.info.info1=55555
コントローラ()
出力は次のとおりです:
宣言時
初期番号 999
他の何か
モディファイア
ミドル 999 55555
申告時
最終ナンバー999
ただし、コードの内部のいくつかについてはよくわかりません。大きな質問と小さな質問があります。私の主な質問は、クラス「修飾子」が次のように変更されたときです。
クラス修飾子():
def __init__(self,aux):
self.info=aux
印刷 ('MODIFIER',self.info.info1)
self.info.info1=55555
エラー AttributeError: type object 'declaration' has no attribute 'info1'
[最後の 2 行を反転するとエラーが修正されます] が生成されます。クラス属性が渡されていないのか、再初期化する必要があるのか は(少なくとも私にとっては)混乱しています。
2 番目の質問は、クラスが更新された後にインスタンスを更新する方法です。 instance = definition()
への 2 回目の呼び出しは、何も達成していないようです。
簡単な補足: はい、わかりました。PEP8 python ガイドに従ってみてください。そうすることでコードがよりクールに (そして読みやすく) なり、すべてのクールな子供たちがそれを使用します。
コードにはいくつか問題があります。modifier(declaration)
を呼び出すと、実際には aux パラメータが初期化されていないクラスになります。modifier(instance)
を次のように呼び出します。 init 関数は既に実行されています。
また、aux.info1
を呼び出すだけでよいので、self.info = aux
を削除する方が簡単です。バイトコードで呼び出す Fast Store コマンドが 1 つ少なくなります)。
最後に print ('MIDDLE ',instance.info1,declaration.info1)
で、初期化されていない宣言を再度解析するため、エラー AttributeError: type object 'declaration' has no attribute ' が発生します。 info1'
、これを修正するには、init 関数を呼び出すように declaration().info1
を配置するだけです (declaration.__init__().info1
).
最終的に次のようになります:
クラス宣言():
def __init__(自己):
self.info1 = 999
self.info2 = 'something_else'
print ('宣言時')
クラスコントローラー():
def __init__(自己):
インスタンス = 宣言()
print ('頭文字', instance.info1, instance.info2)
モディファイア(インスタンス)
print ('MIDDLE', instance.info1, 宣言().info1)
インスタンス = 宣言()
print ('最終番号',instance.info1)
クラス修飾子():
def __init__(self, aux):
印刷 ('MODIFIER')
aux.info1 = 55555
コントローラ()
お役に立てば幸いです。