python类的多态学习笔记

1.重写
多态这个概念依赖于继承,因为继承,使得子类拥有了父类的方法,这里就产生了一个问题,如果子类有一个方法和父类的方法同名,那么子类在调用这个方法时,究竟是调用子类自己的方法还是父类的方法呢?

class Base():
    def print(self):
        print("base")


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


a = A()
a.print()

输出为

A

如果我们对A的print进行修改,比如

class Base():
    def print(self):
        print("base")


class A(Base):
    def no_print(self):
        print("A")


a = A()
a.print()

输出为

base

父类和子类都有print方法,那么子类A的对象a调用print方法时,调用的是谁的print方法呢?
答案是子类的print方法,如果A类没有定义print方法,那么a.print()调用的就是父类的print方法,但是A类定义了print方法,这种情况称之为重写,A类重写了父类的print方法

2.继承的搜索
在继承时,子类“拥有”父类的方法和属性,这种拥有不是真实意义上的拥有。

class Base():
    def print(self):
        print("base")
        
class A(Base):
    pass

print(id(Base.print))
print(id(A.print))

结果如下

1849376805944
1849376805944

Base.print和A.print的内存地址是相同的,这说明他们是同一个方法。执行A.print时,python会寻找print方法,它会先从A类的定义中寻找,没有找到再起A的父类中寻找方法,如果找不到就继续向上寻找

3.多态的表现形式
同一类事物,有多重形态

class Animal:
    def run(self):
        raise NotImplementedError
        
class People(Animal):
    def run(self):
        print("人在行走")
        
        
class Pig(Animal):
    def run(self):
        print("猪在跑")
        
p1 = People()
p1.run()

p2 = Pig()
p2.run()

输出为

人在行走
猪在跑

People和Pig都继承了Animal,都是动物,是同一类事物,他们都有run方法,但是最终的运行结果却不一样,这就是多态,同一类事物有多种形态。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值