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