继承关系类实例对象的非绑定关系方法调用

本文深入探讨了Python中类继承时非绑定方法的调用机制,通过实例展示了父类非绑定方法传入子类实例的正确性,以及子类非绑定方法传入父类实例时引发的TypeError。解释了原因在于子类方法可能操作只有子类定义的属性。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

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。

如何理解呢?子类非绑定方法中可能会操作一些只有子类中定义的属性。


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值