私はクラスとしてgeneral
と呼ばれ、配列としてmsgs[]
を属性として持っています。文字列であるmsg
という属性もあります。私は3つのクラスgen0, gen1, gen2
をインスタンス化し、各オブジェクトをarr (arr = [gen0, gen1, gen2])
という配列に格納します。なぜこのコードは1つではなく3つの配列値を生成していますか? python 3.x
Iは、ID(配列arr
インデックスid
でオブジェクトを指すように)与え、snd(self, id, somemsg)
というクラスgeneral
のメソッドを定義して、アレイmsgs[]
に文字列を追加somemsg
。 たとえば、gen0.snd(1,"hello")
はgen1.msgs.append("hello")
を実行します。
def snd(self, dst, msg):
listGens[dst].msgs.append(msg)
Iは、上記で定義したようgeneral
がクラスのインスタンスであり、以下の関数を定義しています。
def playGeneral(general):
for val in listGens:
if(val.id is general.id):
general.snd(general.id, " ")
continue
general.snd(val.id, general.oc)
playGeneral(gen0)
を呼び出すとき、somemsg
変数が「A」であることを起こるれ、即ちgen0.msg
、genX.msg = "A"
に設定されています。これを行うと、私たちは得る
playGeneral(listGens[0])
for val in listGens:
print(val.msgs)
[' ', 'A', 'A']
[' ', 'A', 'A']
[' ', 'A', 'A']
私はこれがなぜ起こっているのか理解できません。元になりmsgs
クラス属性ではなく、インスタンス属性
class general:
def __init__(self, msgs=[]):
self.msgs = msgs
:
class general:
msgs = []
か:あなたgeneral
クラスは、次のように定義されています。それは
[' ']
['A']
['A']
答えは、少なくとも部分的に、あなたが提供しなかった 'general.snd'のコードに依存しませんか? –
私は、逐語的に説明しましたが、私はコードを含めました。 – socrates
関連するコードは、 'general'の' msgs'属性がどのように初期化されているかを示すものです。 – donkopotamus