2014-10-29 29 views
0

任何人都可以幫助我解決這個問題嗎?
我得到這個消息:回溯:在迎接NameError:

Traceback: in in greet NameError: global name 'name' is not defined 

從這:

class Person: 
    def __init__(self, name): 
     self.name = name 
    def greet(self, other_name): 
     return "Hi {0}, my name is {1}".format(other_name, name) 
+0

好了,你在哪裏認爲是'name'在迎接'()'是從哪裏來的? – TidB 2014-10-29 18:21:24

+1

你爲什麼試圖重新定義'other_name'?刪除'greet'的第一行,並用'.format(other_name,self.name)'替換'.format(other_name,name)'來獲取你需要的數據。 – 2014-10-29 18:21:25

回答

3

name是出在greet函數範圍。您需要改用self.name。例如

class Person: 
    def __init__(self, name): 
     self.name = name 
    def greet(self, other_name): 
     self.other_name = other_name 
     return "Hi {0}, my name is {1}".format(other_name, self.name) 

您可以驗證它的工作原理

>>> mitch = Person('mitch') 
>>> mitch.greet('mitchell') # prints 'Hi mitchell, my name is mitch' 
>>> mitch.name # prints 'mitch' 
>>> mitch.other_name # prints 'mitchell' 
0

namePerson類的實例屬性。意思是,你需要self.前綴它來訪問它的值:

return "Hi {0}, my name is {1}".format(other_name, self.name) 
#             ^^^^^ 
+0

Thx非常多,但不應該被名稱聲明爲全局變量?爲什麼我可以自己訪問它? – 2014-10-29 18:27:25

+0

@OkanAlbayrak - 不,名稱不是全球性的。 'name'是一個傳遞給'Person.__ init__'的參數,然後通過'self.name = name'創建了一個實例屬性。它的值可以通過self來訪問,因爲'self'是對類實例本身的引用。 – iCodez 2014-10-29 18:29:40