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

建筑人才网官方网站评职称科技公司网站首页

建筑人才网官方网站评职称,科技公司网站首页,wordpress建站环境,昆明网站优化排名推广文章目录 0. 前言1. 抽象类的概念与特性1.1 定义1.2 特性 2. 抽象类的实现与使用2.1 抽象类的创建2.2 抽象类的特性验证2.3 注册机制与非直接继承 3. 应用场景与设计价值4. 总结 0. 前言 按照国际惯例#xff0c;首先声明#xff1a;本文只是我自己学习的理解#xff0c;虽然… 文章目录 0. 前言1. 抽象类的概念与特性1.1 定义1.2 特性 2. 抽象类的实现与使用2.1 抽象类的创建2.2 抽象类的特性验证2.3 注册机制与非直接继承 3. 应用场景与设计价值4. 总结 0. 前言 按照国际惯例首先声明本文只是我自己学习的理解虽然参考了他人的宝贵见解及成果但是内容可能存在不准确的地方。如果发现文中错误希望批评指正共同进步。 本文介绍Python中的抽象类。 类封装了共享的属性和方法是对象的抽象。而抽象类是对类的抽象即代表了一类的类是定义接口规范和强制子类实现特定方法的特殊类旨在实现多态性、代码重用与模块化设计。 有点无法直视类这个字了…… 为了让这个说明不这么绕这里需要举一个例子假如我们有两个对象老师和学生正常我们需要分别面向这两个对象进行编程完整地构建这两个类所包含的所有方法和属性。 然后我们通过总结归纳发现这两个类其实可以从一个更通用的基类——人衍生出来这里的人即为抽象类而老师和学生即为子类基类规定了子类的接口规范。 人这个抽象类既规定了其子类必须强制实现的方法比如显示名字、年龄等这些都是作为人必须拥有的属性也规定了可以选择实现的方法比如工资老师才有工资而学生没有。 上面的例子先不考虑类的继承。 1. 抽象类的概念与特性 1.1 定义 抽象类是一种不能被直接实例化的类它主要用于定义一组抽象方法并作为其他类子类的基类。Python中实现抽象类的功能主要依赖于内置的 abcAbstract Base Classes模块。 1.2 特性 接口规范抽象类通过声明抽象方法为子类定义了一个公共接口。这个接口规定了子类必须提供的方法名称、参数列表和返回类型形成了类与类间交互的契约。 强制实现子类在继承抽象类时必须实现所有抽象方法。否则试图实例化子类会引发 TypeError确保子类具备抽象类所要求的基本功能。 多态性抽象类定义的接口允许不同子类根据各自业务需求提供不同的实现。通过抽象基类的引用程序可以以统一的方式处理多种子类对象实现了“一种接口多种行为”的多态特性。 非抽象成员抽象类不仅可以包含抽象方法还可以定义普通方法有实现和属性。这些非抽象成员可以提供通用逻辑或默认行为子类可以选择是否重写或补充。 类型检查与注册除了直接继承外Python的 abc 模块允许通过注册机制声明一个类实现了某个抽象基类的接口从而进行类型检查和验证即使该类并未直接继承抽象基类。 2. 抽象类的实现与使用 2.1 抽象类的创建 在Python中创建抽象类首先需要导入 abc 模块并继承 abc.ABC 类或使用 abc.ABCMeta 元类。接着使用 abc.abstractmethod 装饰器标识抽象方法。 首先我们来看一个简单的示例 import abcclass human(abc.ABC):abc.abstractmethoddef show_basic_info(self, arg):声明一个抽象方法子类必须实现passdef calculate_salary(self, arg):一个普通方法提供默认行为子类可选重写print(Default behavior in the abstract base class)class teacher(human):def show_basic_info(self, name, age, if_married Is):print(name:%s%name)print(age:%i%age)print(%s married%if_married)def calculate_salary(self, teach_year):if teach_year 20:print(salary is $2000)else:print(salary is $1000)class student(human):def show_basic_info(self, name, age, grade):print(name:%s%name)print(age:%i%age)print(grade:%i%grade)MrLee teacher() MrLee.show_basic_info(Lee, 28, Is not) MrLee.calculate_salary(5) print(\n) Tommy student() Tommy.show_basic_info(Tommy,12,6)输出 name:Lee age:28 Is not married salary is $1000name:Tommy age:12 grade:62.2 抽象类的特性验证 现在我们再回过头来验证下上面说的抽象类的特性 接口规范这点通过上面的示例可以明显看出无需多说。 强制实现需要强制实现的方法会用装饰器abc.abstractmethod标注。对于上段代码如果我们把calculate_salary()方法也标注一下 import abc class human(abc.ABC):abc.abstractmethoddef show_basic_info(self, arg):声明一个抽象方法子类必须实现passabc.abstractmethod #变成强制实现的方法def calculate_salary(self, arg):一个普通方法提供默认行为子类可选重写print(Default behavior in the abstract base class) class teacher(human):def show_basic_info(self, name, age, if_married Is):print(name:%s%name)print(age:%i%age)print(%s married%if_married)def calculate_salary(self, teach_year):if teach_year 20:print(salary is $2000)else:print(salary is $1000)class student(human):def show_basic_info(self, name, age, grade):print(name:%s%name)print(age:%i%age)print(grade:%i%grade)MrLee teacher() MrLee.show_basic_info(Lee, 28, Is not) MrLee.calculate_salary(5) print(\n) Tommy student() Tommy.show_basic_info(Tommy,12,6)student类实例化过程就会报错而teacher类实现了这个方法就不会报错 TypeError: Cant instantiate abstract class student with abstract method calculate_salary name:Lee age:28 Is not married salary is $1000多态性上面这个示例中虽然teacher和student子类都有show_basic_info()方法但是它们根据不同子类的不同需求有着不同的定义即实现了“一种接口多种行为”。非抽象成员例如可以增加一个announce()方法 import abc class human(abc.ABC):abc.abstractmethoddef show_basic_info(self, arg):声明一个抽象方法子类必须实现passdef calculate_salary(self, arg):一个普通方法提供默认行为子类可选重写print(Default behavior in the abstract base class)def announce(self): #增加一个具体的方法print(Im a human)class student(human):def show_basic_info(self, name, age, grade):print(name:%s%name)print(age:%i%age)print(grade:%i%grade)Tommy student() Tommy.show_basic_info(Tommy,12,6) Tommy.announce()输出为 name:Tommy age:12 grade:6 Im a human #新增加的非抽象成员2.3 注册机制与非直接继承 对于不直接继承抽象基类但仍希望符合其接口规范的类可以使用 abc.ABCMeta.register() 方法进行注册我们再改造下上文的例子 import abc class human(abc.ABC):abc.abstractmethoddef show_basic_info(self, arg):声明一个抽象方法子类必须实现passdef calculate_salary(self, arg):一个普通方法提供默认行为子类可选重写print(Default behavior in the abstract base class)def announce(self): #增加一个具体的方法print(Im a human)class worker(abc.ABC):passclass firefighter(worker):def show_basic_info(self, age):print(age:%i%age)John firefighter() John.show_basic_info(23) print(isinstance(John, worker)) #True print(isinstance(John, human)) #Falsehuman.register(firefighter) print(isinstance(John, worker)) #True print(isinstance(John, human)) #True这里的John是子类firefigher的实例firefight原本仅是worker的子类但是通过观察发现firefight也符合human的接口于是可以通过.register()给firefight注册为human的子类。 3. 应用场景与设计价值 1. 设计原则与设计模式 抽象类是实现“依赖倒置原则”、“开闭原则”等设计原则的关键工具同时也是“策略模式”、“模板方法模式”等设计模式的基础构造块。它们有助于构建松耦合、高内聚的系统使其易于应对变化和扩展。 2. 大型项目与框架开发 在复杂的软件项目和框架开发中抽象类常被用来定义核心组件的接口标准。例如Web框架可能定义一个抽象视图类规定子类必须实现 render() 方法来呈现网页内容。这种标准化接口确保了框架与用户自定义代码之间的协调一致。 3. API设计 对外提供API时抽象类可以作为客户端实现特定接口的指南。通过定义抽象服务类或接口类API文档可以直接引用这些类来说明预期的行为和方法签名简化了第三方集成过程。 4. 总结 Python抽象类作为设计和组织复杂代码的强大工具通过定义接口规范、强制子类实现特定方法以及支持多态性极大地增强了代码的可读性、可扩展性和可维护性。无论是大型项目、框架开发还是API设计正确理解和运用抽象类都能带来显著的架构优势。通过结合 abc 模块提供的功能开发者可以构建更为健壮、灵活的面向对象系统满足不断变化的需求和未来的扩展。
http://www.pierceye.com/news/678529/

相关文章:

  • 甘肃省建设工程网上投标网站好玩的网游
  • 大学生网站建设课程总结唐四薪php网站开发答案
  • 郑州的网站建设公司有哪些企业策划案
  • 查询域名网站苏州专业网站seo推广
  • 游戏网站建设计划书梦织做网站
  • 电商运营公司简介seo搜索引擎优化求职简历
  • 烟台门户网站有哪些网站做的比较好的
  • 外贸企业论坛网站建设找建站公司做网站注意事项
  • 莱芜亓家网站网站认证怎么认证
  • 安康做网站的公司wordpress zh_cn.po
  • 温州网页网站制作怎么看一个网站有没有做301
  • 网站主流系统2018年网站建设
  • 好的交互网站sql网站发布流程
  • 河北住房与城乡建设部网站网站管理手册
  • 学网站建设需要用哪几个软件营销型网站建设的指导原则
  • 网站建设产品价格销售型网站如何做推广
  • 免费情感网站哪个好wordpress和微信打通
  • 做网站首页尺寸大小做网站的个人心得
  • 思乐科技 成都网站建设做单页网站价格
  • 网站关键词排名全掉了汽车用品网站
  • 网站未备案可以做经营活动吗做电商运营有前途吗
  • 网站建设优化服务百度指数与百度搜索量
  • 网站添加漂浮二维码怎么做内网 wordpress慢
  • h5创建网站网页设计主题推荐
  • 35开始学网站开发崇信县门户网
  • 一站式企业服务wordpress 网站登录
  • 网站上传工具有什么甘南北京网站建设
  • 株洲做网站那家好wordpress调用当前页文章
  • 想学做网站报班免费做一个自己app
  • 网站链接查询经典的公司简介范文