Level:初學者面向對象編程基礎:繼承與投影(Python)
我正在做面向對象編程的第一步。代碼旨在展示如何通過鏈條傳遞方法。因此,當我撥打UG.say(person, 'but i like')
時,方法say
被指示撥打MITPerson
。鑑於MITPerson
不包含say
方法,它會將其傳遞給Person
。我認爲代碼沒有問題,因爲它是講座的一部分(參見下面的源代碼)。我認爲是我在運行代碼時省略了定義某些內容。不知道是什麼。我認爲UG instance
錯誤信息正在尋找作爲第一個參數是指self
,但原則上,不需要提供,是否正確?任何提示?
class Person(object):
def __init__(self, family_name, first_name):
self.family_name = family_name
self.first_name = first_name
def familyName(self):
return self.family_name
def firstName(self):
return self.first_name
def say(self,toWhom,something):
return self.first_name + ' ' + self.family_name + ' says to ' + toWhom.firstName() + ' ' + toWhom.familyName() + ': ' + something
class MITPerson(Person):
def __init__(self, familyName, firstName):
Person.__init__(self, familyName, firstName)
class UG(MITPerson):
def __init__(self, familyName, firstName):
MITPerson.__init__(self, familyName, firstName)
self.year = None
def say(self,toWhom,something):
return MITPerson.say(self,toWhom,'Excuse me, but ' + something)
>>> person = Person('Jon', 'Doe')
>>> person_mit = MITPerson('Quin', 'Eil')
>>> ug = UG('Dylan', 'Bob')
>>> UG.say(person, 'but i like')
UG.say(person, 'bla')
**EDIT (for completeness)**: it should say UG.say(person, 'but i like') #the 'bla' creeped in from a previous test
TypeError: unbound method say() must be called with UG instance as first argument (got Person instance instead)
來源:麻省理工學院開放式http://ocw.mit.edu計算機科學導論和程序2008年秋季
@all:非常感謝你的解釋!這也是一個很好的例子,顯示了名稱(變量,類等)的混淆是多麼的容易......特別是如果基礎仍然有點不穩定......我會盡量小心/注意命名約定。 – raoulbia 2010-09-26 15:46:24
不客氣,巴巴。祝你學習好運。 – unutbu 2010-09-26 16:44:08