8/12追記
@shiracamusさんより丁寧に解説して頂き解決しました。
結論として変数をインスタンス化をしていなかったらとなります。
class Result:
def __init__(self): # 初期化をしていなかった
self.result = []
初期化することでappendでも代入されることを確認しました。
ありがとうございます。
以下追記前の記事です。
はじめに
PythonでクラスをJSONにシリアライズするときにハマったので書き落としておきます。
まだまだ初学者で根本的な間違いをしていそうなので、理由わかる方いましたらぜひ教えて頂きたいです。
環境
python 3.9.6
pipenv version 2021.5.29
本文
###0. 前準備
実行結果をまとめておくクラスに内包されたlistを用意しておきました。
class Result:
result: list[str] = []
###1. append
さて、ここに実行結果の文字列をどんどん代入していきますが最初はappendで追加していきました。
def test_append(self):
result = Result()
result.result.append("a")
result.result.append("b")
result.result.append("c")
json_string = json.dumps(result.__dict__, indent=4)
print(json_string)
実行結果
{}
???となったので中身を見てみます。
def test_append(self):
result = Result()
result.result.append("a")
result.result.append("b")
result.result.append("c")
tmp = result.__dict__
print(tmp) # 結果: {}
空ですね。
###2. 演算子
次に演算子で代入してみました。
def test_assignment(self):
result = Result()
result.result += ["a"]
result.result += ["b"]
result.result += ["c"]
tmp = result.__dict__ # {'result': ['a', 'b', 'c']}
jsonString = AnJson.objectToJson(result)
print(jsonString)
実行結果
{
"result": [
"a",
"b",
"c"
]
}
入ってる。。。なぜ。。。
終わりに
Pythonの配列を使うと毎回挙動で躓くので勉強が足りてない感がすごいです。
今回のは放置しておくと今後困りそうなので記事に落としました。
ご親切な御仁がいましたらこの挙動の理由を教えて頂きたいです。
以上
参考