1
我想添加一個對象到一個具有函數的類。 這是我試過的,但輸出結果並不是我所期望的。如何編寫將對象添加到類的函數?
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)
所以我試過的是創建一個簡單的類並創建一個添加函數。 我也有一些代碼是打印我班上的所有對象。該代碼被執行兩次:一次在加入函數的末尾,一次在所有代碼的末尾。我在兩者之間打印了一條線來區分它們。
我執行的代碼和所使用的加法功能添加5名:亞歷艾伯茨,布萊恩承擔,卡西康納,唐娜Dawson和埃瑪愛德華茲。這是結果:
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
我不知道爲何物似乎消失,爲什麼添加打印功能與該模式的名稱。我期望的,我希望代碼打印示例對象和我只輸入一次的所有名稱。我想在最後添加功能和代碼來打印相同的對象名稱。
我很抱歉,如果我沒有解釋這一切清楚。
你的'adds()'函數有一個遞歸。這解釋了意想不到的模式。所以,當你執行'添加'('Alex Alberts')'時,你可以調用'添加'('Brian Borne')'等等。一旦所有輸入完成,所有疊加起來的'get_objects()'循環屬於最後一個'adds()'調用,通過第一個'adding()'調用一個接一個執行。該堆疊正在導致該模式。所以,在這種情況下,你必須避免遞歸。 – nikpod
以上評論是正確的。除了由可疑遞歸循環引起的問題之外,以這種方式使用'gc'並不是一個好主意 - 有更好更脆弱的方法。 –