python中的多态

多态性

是允许将父对象设置成为和一个或多个它的子对象相等的技术,比如Parent:=Child; 多态性使得能够利用同一类(基类)类型的指针来引用不同类的对象,以及根据所引用对象的不同,以不同的方式执行相同的操作.

c++中多态更容易理解的概念为

允许父类指针或名称来引用子类对象,或对象方法,而实际调用的方法为对象的类类型方法。

--------------以上内容来自百度百科----------------


python不支持多态

python是一种动态语言,参数在传入之前是无法确定参数类型的,看下面例子:

class A:
    def prt(self):
        print "A"

class B(A):
    def prt(self):
        print "B"
        
class C(A):
    def prt(self):
        print "C"
       
class D(A):
    pass

class E:
    def prt(self):
        print "E"

class F:
    pass

def test(arg):
    arg.prt()

a = A()
b = B()
c = C()
d = D()
e = E()
f = F()

test(a)
test(b)
test(c)
test(d)
test(e)
test(f)


输出结果:

A
B
C
A
E
Traceback (most recent call last):
  File "/Users/shikefu678/Documents/Aptana Studio 3 Workspace/demo/demo.py", line 33, in <module>
    test(a),test(b),test(c),test(d),test(e),test(f)
  File "/Users/shikefu678/Documents/Aptana Studio 3 Workspace/demo/demo.py", line 24, in test
    arg.prt()
AttributeError: F instance has no attribute 'prt'

乍一看似乎python支持多态,调用test(a),test(b),test(c),test(d)时工作的很好,但是下边就大不一样了。调用test(e)时,python只是调用e的prt方法,并没有判断e是否为A子类的对象(事实上,定义test方法时也没有指定参数的类型,python根本无法判断)。调用test(f)时报错,原因很很简单,f没有prt方法。


  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值