学习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循环中建立三个不同类实例”
但是实际上就是没有,具体为什么我现在也不是很清楚,鉴于是初学者也不好妄下定论。等以后搞清楚了再来更新。