2012-07-06 100 views
10

我只是在學習編程,並且正在學習Python作爲第一語言。作爲一個練習,我試圖編寫一個地址簿程序。新聯繫人由用戶使用命令提示符創建。新聯繫人是Contacts類的對象實例。從用戶輸入創建動態命名變量

我知道如何從代碼中實例化一個類對象,但是如何根據用戶輸入創建一個帶有變量名稱的類?假設我提示用戶輸入名稱 - 我如何獲取該信息並將其用於我的新對象的變量名稱?

謝謝!

+0

我們很高興提供幫助,但你確實應該發佈一些代碼(你試過什麼),以便我們可以指導你更好 – inspectorG4dget 2012-07-06 00:08:16

回答

19

從評論中,你發現你在問這個問題不止一次。 「我如何創建動態命名變量」。

答案:不要這樣做。有機會有更好的方法來解決這個問題。

說明:

如果您要創建動態命名變量,則不太有很好的手柄,他們一旦被創建。當然有辦法檢查全局和局部範圍,看看有什麼。但事實是,你應該對創建的內容有明確的控制權。

你應該做的是把它們放入一個字典:

people = {} 
name = raw_input("What name? ") # "person" 
people[name] = User(name) 

print people 
# {'person': <User: "person">} 

print people.keys() 
# ['person'] 

這樣,你是不是在你的命名空間中創建任意變量。您現在有一個鍵和對象的字典作爲值。這也是一種允許用戶提供的輸入來驅動變量命名的蠕蟲。

欲瞭解更多信息,只需在這裏搜索同一主題,看看爲什麼你不應該這樣做的許多例子。無論您看到什麼樣的示例,都會向您展示如何使用全局變量()等,請採取我的建議,不要走這條路。愛和享受..也許擁抱和吻,你的字典。

參考文獻:

+0

感謝您的幫助!雖然我的問題可能不夠精確。我知道如何根據用戶輸入將值分配給對象的字段,但是對象的實際名稱又如何呢? – ShaunSoda 2012-07-06 00:15:44

+0

是的,當你在這裏尋求幫助時,你需要更加詳細。你打印對象時是否在談論實例的表示?對象的「名稱」是什麼意思? – jdi 2012-07-06 00:19:08

+0

呵呵。對不起,正如我所說,我只是學習編程,所以對我的條款忍受。當你創建一個新的類對象時,你給它一個名字。我的課叫做通訊錄,所以如果我要創建新的對象,他們可能被稱爲contact1,contact2等。也許這些被稱爲標識符?我想要命名每個對象的標識符,無論用戶輸入什麼。 – ShaunSoda 2012-07-06 00:20:57

0

你不明確你爲什麼會想實例化哪一個的名字被確定爲運行時,你的對象希望。認識到這一點很重要,這不是常見的做法。

這是可能的,但是,使用內置的setattr:

setattr(someobject, name, user) 

有點比較正常的用法是使用字典。因此,如果您有多個用戶實例並想要存儲它們,則可以將它們存儲在下面的字典中。這將允許您按名稱引用該對象。

class User(object): 

    def __init__(self, name): 
     self.name = name 


users = {} 

name = raw_input("What name?") 
users[name] = User(name) 


print users 
print users['Andre'].name 

輸出示例:

What name?Andre 
{'Andre': <__main__.User object at 0x7f6b418a8710>} 
Andre 
+0

不幸的是,這最終不是OP想要的。我提供了相同的答案,然後必須改變它。 – jdi 2012-07-06 00:43:34

+0

barf。也很重要的是別人會從這個問題上蹣跚學步。 – 2012-07-06 00:55:25

+0

非常感謝!說得通! – ShaunSoda 2012-07-06 00:57:25