私は関数を持つクラスにオブジェクトを追加したいと思います。 これは私が試みたものですが、出力は私が期待したものではありませんでした。オブジェクトをクラスに追加する関数を作成するにはどうすればよいですか?
import gc
class People:
def __init__(self, name):
self.name = name
example = People('example')
def adding():
firstName = input('First name:')
lastName = input('LastName:')
fullName = firstName + " " + lastName
fullName = People(fullName)
addMore = input('Add another one?')
if addMore != 'no':
adding()
for obj in gc.get_objects():
if isinstance(obj, People):
print(obj.name)
adding()
print(10*'=')
for obj in gc.get_objects():
if isinstance(obj, People):
print(obj.name)
私が試みたのは、単純なクラスを作成して追加機能を作成することでした。 私のクラスのすべてのオブジェクトを印刷するためのコードもあります。そのコードは2回実行されます。追加関数内の最後とコード全体の1回です。私はそれらを区別するために2つの線を印刷しました。
コードを実行し、追加機能を使用してAlex Alberts、Brian Borne、Casey Connor、Donna Dawson、Emma Edwardsの5つの名前を追加しました。結果は次のようになります。
example
Alex Alberts
Brian Borne
Casey Connor
Donna Dawson
Emma Edwards
example
Alex Alberts
Brian Borne
Casey Connor
Donna Dawson
example
Alex Alberts
Brian Borne
Casey Connor
example
Alex Alberts
Brian Borne
example
Alex Alberts
==========
example
なぜオブジェクトが消えているように見えているのか、なぜ追加機能がそのパターンで名前を印刷するのか不明です。私は期待して、サンプルオブジェクトと、一度だけ入力したすべての名前をコードに出力するようにしました。そして、私は最後に追加関数とコードで同じオブジェクト名を出力したかったのです。
これをすべて明確に説明していないとすみませます。
あなたの 'adding()'関数には再帰があります。これは予想外のパターンを説明します。だから、あなたが '' Alex Alberts ''を追加すると、 '' Brian Borne ''というように追加します。すべての入力が完了すると、最後の 'adding()'コールに属するスタックされた 'get_objects()'ループはすべて、最初の 'adding()'コールから順番に実行されます。この積み重ねがそのパターンを引き起こしています。したがって、この場合、再帰を避ける必要があります。 – nikpod
上記のコメントは正しいです。疑わしい再帰的ループによって引き起こされる問題に加えて、このように 'gc'を使用することは、非常に良いアイデアではありません。 –