当前位置: 首页 > news >正文

163免费邮箱入口/广州seo关键词优化费用

163免费邮箱入口,广州seo关键词优化费用,福永自适应网站建设,惠州外贸网站建设在Python中,类的继承与函数的重写,是我们再熟悉不过的知识点。但如何实现,方法的强制重写与禁止重写,这大概是很多初学者的一个知识盲区吧? 01强制重写 **需求:**父类一个方法,强制子类去重写…

在Python中,类的继承与函数的重写,是我们再熟悉不过的知识点。但如何实现,方法的强制重写与禁止重写,这大概是很多初学者的一个知识盲区吧?

01强制重写

**需求:**父类一个方法,强制子类去重写。

实现的方法大约有这两种:

1、把父类变为抽象基类,然后给指定方法加上装饰器@abc.abstractmethod
2、指定方法抛出NotImplementedError异常

先来说说第一种

由于定义抽象基类,Py2和Py3有所区别,这里都举个例。

Python2.x中

# coding:utf-8
import abcclass Animal(object):__metaclass__ = abc.ABCMeta@abc.abstractmethoddef speak(self):passclass Dog(Animal):def speak(self):print("汪汪...")class Cat(Animal):passif __name__ == '__main__':dog = Dog()dog.speak()cat = Cat()cat.speak() 

输出结果

汪汪...
Traceback (most recent call last):File "F:/Python Script/hello.py", line 116, in <module>cat = Cat()
TypeError: Can't instantiate abstract class Cat with abstract methods speak

如果是Python3.x中,只需把 Animal 类改成如下即可

class Animal(metaclass=abc.ABCMeta):@abc.abstractmethoddef speak(self):pass

输出结果,报错。

Traceback (most recent call last):
汪汪...File "F:/Python Script/hello.py", line 114, in <module>cat = Cat()
TypeError: Can't instantiate abstract class Cat with abstract methods speak

以上说明,只要把一个方法定义成抽象方法,那解释器就会要求子类,必须实现(重写)这个方法,否则就会报TypeError异常。

要注意的是,这个异常在实例化时,就会抛出,而不需要等到调用函数。

再来说说,第二种方法

我们给父类的speak方法,加上抛出异常语句。他会帮我们检测,这个方法在子类中有没有被重新实现,没有的话,就会抛出异常。

class Animal():def speak(self):raise NotImplementedclass Dog(Animal):def speak(self):print("汪汪...")class Cat(Animal):passif __name__ == '__main__':dog = Dog()dog.speak()cat = Cat()cat.speak()

运行后,报错,提示我们这个方法没有被重写。

汪汪...
Traceback (most recent call last):File "F:/Python Script/hello.py", line 114, in <module>cat.speak()File "F:/Python Script/hello.py", line 101, in speakraise NotImplemented
TypeError: exceptions must derive from BaseException

要注意的是,这个异常只有在调用speak函数时,才会抛出。

02禁止重写

其实这个说法并不太准确。实际是可以重写的,只是无法生效而已。

来看下这个常规的例子。

class Base:def go(self):print("base")def run(self):self.go()class Extend(Base):def go(self):print("extend")person = Extend()
person.run()

输出结果,很正常,和我们的预期符合。

extend

先不要开心太早,来看看下面这个例子

class Base:def __go(self):print("base")def run(self):self.__go()class Extend(Base):def __go(self):print("extend")person = Extend()
person.run()

输出如下,你一定很纳闷,为什么会这样。

base

仔细观察一下,其实区别只有,一个是公开函数,一个私有函数。

于此,我们可以得出结论。

私有函数的作用范围仅在当前类,其表象上可以被重写,但实际上并无重写的效果。

如果你想学习自动化测试、性能测试、测试开发,但是自己又非常的迷茫,没有思路又怕耽误时间,那么你可以找我。我非常愿意将自己从业10年的经验传授给你,也愿意将自己独家的核心教程免费赠送。

公众号【程序员阿沐】找到我!我一直在等着你!

http://www.jmfq.cn/news/4936033.html

相关文章:

  • 推广网站哪家做的好/今天最新的新闻
  • 优质网站建设方案/年轻人不要做网络销售
  • 建筑云平台/合肥关键词排名优化
  • 创意网站页面/b2b网站大全免费
  • 云南网站制作怎么计费/武汉seo管理
  • 济南信息化网站/漳州seo网站快速排名
  • 南阳锐诚网站建设/软文营销文章范文
  • 魔方建站/口碑营销的案例及分析
  • 自己做网站用什么数据库/汕头seo网站推广
  • 中国印花图案设计网站/百度seo排名优化软件分类
  • 潍坊专业网站建设最新报价/安徽网站优化
  • 做网站都需要哪些信息/全球搜怎么样
  • 有一个私人做慈善的网站/百度seo关键词工具
  • 建设银行的网站用户名是什么意思/公司推广方案
  • 网站建设技术入股合同/市场推广方案和思路
  • 无锡网站建设价格/品牌如何做推广
  • 建设 静态网站/哪些广告平台留号码
  • 公司建设一个网站需要多少钱/网推渠道
  • 网页美工设计图片/淘宝seo优化是什么
  • 大连企业网站模板/智能建站平台
  • 做网站参考文献/网站广告投放收费标准
  • 外卖网站怎么做/关键词挖掘方法
  • 网站建设的五类成员/珠海网站设计
  • 温州企业建站系统模板/郑州百度推广代运营
  • 重庆哪里做网站/短视频精准获客系统
  • 东莞常平学校网站建设/惠州seo公司
  • 企业做网站可以带中国吗/河源疫情最新通报
  • c#做asp.net网站/微信推广多少钱一次
  • 华为网站推广策略/东莞优化排名公司
  • 扁平化网站布局/南宁seo规则