级别:初学者
我正在做面向对象编程的第一步。该代码旨在显示方法如何向上传递。因此,当我调用UG.say(person, 'but i like')
该方法时say
,会指示调用 class MITPerson
。鉴于它MITPerson
不包含say
方法,它将把它传递给 class 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)
来源:MIT OpenCourseWare http://ocw.mit.edu 2008 年秋季计算机科学和编程概论