继承关系类实例对象的非绑定关系方法调用
2015-08-20 12:49
453 查看
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 '-----------'
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。
如何理解呢?子类非绑定方法中可能会操作一些只有子类中定义的属性。
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。
如何理解呢?子类非绑定方法中可能会操作一些只有子类中定义的属性。
相关文章推荐
- 数学真头疼
- csv读入数据,用julia/matplotlib/pyplot 画矢量图导入word中
- android基于开源网络框架asychhttpclient,二次封装为通用网络请求组件
- 本地拦截genymotion或者Android模拟器的网络请求
- innodb 悲观锁,乐观锁
- 组件的使用(三)AutoCompleteTextView的使用
- socket编程中对sigpipe信号的处理
- Android开源项目第五篇——优秀个人和团体篇
- ELF文件格式以及装载过程
- 使用live delegate on解决js后装html故障问题
- Jquery
- Android开源项目第三篇——优秀项目篇
- ClassLoader—流程观察程序执行类加载-verbose:class
- 剑指offer-第四章解决面试题思路之总结
- Android开源项目第二篇——工具库篇
- Linux 下面adb命令的使用
- Android开源项目第四篇——开发及测试工具篇
- NAT穿越-TCP打洞
- 初识Ubuntu——使用SecureCRT连接Ubuntu&命令行显示当前路径
- 剑指offer-第四章解决面试题思路(字符串的排序)