TypeError: method() missing 1 required positional argument: 'self'

学习python的时候把python学习手册上面的示例代码跟着敲了一遍。然后居然发现不能通过。检查之后发现确实不是抄错了,就是这行代码无法通过。我不知道作者的是如何通过的,反正我自己的编译器就是无法通过。首先上教材原代码:

class Super:
    def method(self):
        print('in Super.method')

    def delegate(self):
        self.action()


class Inheritor(Super):
    pass


class Replacer(Super):
    def method(self):
        print('in Replacer.method')


class Extender(Super):
    def method(self):
        print('starting Extender.method')
        Super.method(self)
        print('ending Extend.method')


class Provider(Super):
    def action(self):
        print('in Provider.action')


if __name__ == '__main__':
    for klass in (Inheritor,Replacer,Extender):
        print('\n'+klass.__name__+'....')
        klass.method()
        print('\nProvider...')
        x = Provider()
        x.delegate()

编译器运行结果:
这里写图片描述
报错的意思是差一个参数self,通常来说方法都不需要传一次self参数进去的。那么这里为什么会报错呢?
实际上这个东西调用方法是需要一个实例的。一般调用类里面的方法的方式有两种
1.instance.method(args…)
2.class.method(instance,args…)

上面这个东西出错的原因是调用方法为clas.method()没有instance。。。
虽然教材第695页顶部有说过“这个例子末尾的自我测试程序代码会在for循环中建立三个不同类实例
但是实际上就是没有,具体为什么我现在也不是很清楚,鉴于是初学者也不好妄下定论。等以后搞清楚了再来更新。

猜你喜欢

转载自blog.csdn.net/c2496649361/article/details/80198054