问答详情
源自:3-5 类的多态

请问按老师的代码写,结果为什么是bound method.....

class Programer(object):
    hobby='play computer'
    def __init__(self,name,age,weight):
        self.name=name
        self._age=age
        self.__weight=weight
    def self_intro(self):
        print 'my name is %s \nI am %s years old\n' % (self.name, self._age)
class BackendProgramer(Programer):
    def __init__(self,name,age,weight,language):
        super(BackendProgramer,self).__init__(name,age,weight)
        self.language = language
    def self_intro(self):
        print 'my name is %s \nmy favourite language is %s\n' % (self.name, self.language)
def intro(i):
    if isinstance(i,Programer):
        print i.self_intro
if __name__=='__main__':
    prog = Programer('Albert',25,'80')
    back_prog = BackendProgramer('Alex',23,'80','Ruby')
    intro(prog)
    intro(back_prog)

运行结果是:

<bound method Programer.self_intro of <__main__.Programer object at 0x030A5490>>

<bound method BackendProgramer.self_intro of <__main__.BackendProgramer object at 0x030A5510>>


提问者:Autosave_杨 2017-06-04 16:07

个回答

  • wenjinghao
    2018-11-09 00:21:59

    17行出错!类方法self_intro不能直接这样调用,除非它本身是property一样的属性调用方法模式,那就可以不用加()

  • 慕先生1054495
    2018-07-04 22:12:09

    第17行,i.self_intro改为i.self_intro()

  • qq_个承诺牵伴一生_0
    2018-04-13 13:01:04

    看不懂,不过我觉的把print i.self_intro()    改成 return i.self_intro()   应该就不会有空值了

  • 慕桂英7288279
    2018-02-26 12:57:30

    为什么会返回none呢

  • Autosave_杨
    2017-06-04 16:55:06

    原来是print i.self_intro忘记加()