首页 > 编程语言 >python-面向对象-类的多态-父类方法重写,继承多态的表现形式

python-面向对象-类的多态-父类方法重写,继承多态的表现形式

时间:2022-12-05 15:13:23浏览次数:36  
标签:python 子类 多态 print 父类 方法 class

1.类的多态

python面向对象的多态依赖于继承, 因为继承,使得子类拥有了父类的方法, 子类的方法与父类方法重名时是重写, 同一类事物,有多重形态, 这就是面向对象概念里的多态,多态使得不同的子类对象调用相同的 类方法,产生不同的执行结果,可以增加代码的外部调用灵活度。

2.重写

多态这个概念依赖于继承,因为继承,使得子类拥有了父类的方法,这里就产生了一个问题,如果子类有一个方法和父类的方法同名,那么子类在调用这个方法时,究竟是调用子类自己的方法,还是父类的方法?
class Base():
    def print(self):
        print("base")
class A(Base):
    def print(self):
        print("A")
a = A()
a.print()

父类和子类都有print方法,那么子类A的对象a调用print方法时,调用的是谁的print方法呢?

答案是子类的print方法,如果A类没有定义print方法,那么a.print()调用的是父类的print方法,但是A类定义了print方法,这种情况称之为重写,A类重写了父类的print方法。

3.继承的搜索

强调继承时,子类“拥有”父类的方法和属性,特意加了双引号,因为,这种拥有不是真实意义上的拥有。
class Base():
    def print(self):
        print("base")
class A(Base):
    pass
print(id(Base.print))
print(id(A.print))

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

这便是子类拥有父类属性和方法的真相。

4.多态的表现形式

同一类事物,有多重形态

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方法,但是最终的运行结果却不一样,这就是多态,同一类事物有多种形态。

标签:python,子类,多态,print,父类,方法,class
From: https://www.cnblogs.com/joyware/p/16952313.html

相关文章

  • python django shell 更新代码后需要重启
    pythondjango 使用pythonmanage.py shell练习时更改代码后,需要重新打开窗口进行练习TRANSLATEwithxEnglishArabicHebrewPolishBulgarianH......
  • Selenium4+Python3系列(十) - Page Object设计模式
    前言​​PageObject(PO)​​​模式,是​​Selenium​​实战中最为流行,并且被自动化测试同学所熟悉和推崇的一种设计模式之一。在设计测试时,把页面元素定位和元素操作方法按照......
  • python + uiautomator2 常用公共方法封装
    前言由于公司UI自动化框架底层用的是Uiautomator2,所以我就用Uiautomator2搭了一套UI自动化框架,思路其实和Appnium一样的。uiautomator2是一个自动化测试开源工具,仅支持an......
  • scrapy3在python2,python3共存下的使用
    因为安装了PYTHON2,PYTHON3,之前的SCRAPY在PYTHON2下是可以的,但在3下运行失败,关联的还是2,原来要在PYTHON3运行的时候,要用全路径:执行scrapy命令(假设......
  • python-容器类型
    容器类型1.通用操作1.1成员运算符(1)语法:数据in容器数据notin容器(2)作用:如果在指定的序列中找到值,返回bool类型。#以字符串str为例,列表l......
  • Python脚本添加参数的几种方法
    之前用python添加参数都是用的input函数,不能添加默认值也不能输入help提示。最近发现了2个更好用的库分享给大家。一、使用input库。这个使用很简单,就不过多描述了。......
  • Python 操作 Excel
    Python操作Excel目录Python操作Excel1安装pandas2pandas中操作Excel的函数2.1loc()2.1.1根据某些条件选择数据2.1.2选择一个行的范围2.1.3根据条件更新列的值......
  • Selenium4+Python3系列(九) - 上传文件及滚动条操作
    一、上传文件操作上传文件是每个做自动化测试同学都会遇到,而且可以说是面试必考的问题,标准控件我们一般用​​send_keys()​​​就能完成上传,但是我们的测试网站的上传控件......
  • python 基础--类
    文章目录​​面向对象编程--python类​​​​类特殊的系统变量​​​​`__slots__`​​​​`@property`​​​​`__str__`​​​​`__iter__`​​​​`__getitem__`​​​......
  • python要点1
    python要点12.7下安装PIP​​​https://pypi.python.org/pypi/pip#downloads​​​注意选择tar.gz包,目前最新版本为:pip-8.1.2.tar.gz(md5,pgp)......