class A(object):
def f(self):
print 'A f'
class B(A):
def f(self):
A.f(self)
a=A()
b=B()
a.f()
b.f()
A.f(a)
B.f(b)
print '-----------'
A.f(b)
print '-----------'
def f(self):
print 'A f'
class B(A):
def f(self):
A.f(self)
a=A()
b=B()
a.f()
b.f()
A.f(a)
B.f(b)
print '-----------'
A.f(b)
print '-----------'
B.f(a)
结果:
A f
A f
A f
A f
-----------
A f
-----------
Traceback (most recent call last):
File "k.py", line 17, in <module>
B.f(a)
TypeError: unbound method f() must be called with B instance as first argument (got A instance as first argument (got A instance instead)
结论:1. 父类非绑定方法传入子类实例对象OK。
2. 子类非绑定方法传入父类实例对象NO。
如何理解呢?子类非绑定方法中可能会操作一些只有子类中定义的属性。