级别:初级
我正在迈出面向对象编程的第一步。该代码旨在展示方法是如何向上传递的。因此,当我调用 UG.say(person, 'but i like') 时,方法 say 被指示调用类 MITPerson。鉴于 MITPerson 不包含 say 方法,它将把它传递给 Person 类。我认为代码没有任何问题,因为它是讲座的一部分(请参阅下面的源代码)。我认为是我在运行代码时忽略了定义某些东西。不确定是什么。我认为错误消息正在寻找的 UG 实例 作为第一个参数引用 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 年秋季计算机科学与编程导论
请您参考如下方法:
您正在调用类而不是实例。
>>> ug = UG('Dylan', 'Bob')
>>> UG.say(person, 'but i like')
UG.say(person, 'bla')
改为调用实例
>>> ug = UG('Dylan', 'Bob')
>>> ug.say(person, 'but i like')
