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

技术网站模版广东优化疫情防控措施

技术网站模版,广东优化疫情防控措施,海城做网站公司,怎么用小程序做微网站抽象类在项目中的实际应用主要体现在 规范代码结构、强制子类实现某些方法、提供部分通用功能,让代码更稳定、易维护。 举个例子:数据校验器 假设你在做一个 用户输入校验系统,需要支持 数字校验、字符串校验 和 邮箱校验。如果不用抽象类&…

抽象类在项目中的实际应用主要体现在 规范代码结构强制子类实现某些方法提供部分通用功能,让代码更稳定、易维护。

举个例子:数据校验器

假设你在做一个 用户输入校验系统,需要支持 数字校验字符串校验邮箱校验。如果不用抽象类,每个校验器都会自己定义 validate() 方法,开发者可能忘了统一标准,导致代码不一致。

用抽象类改进
from abc import ABC, abstractmethodclass Validator(ABC):  """抽象类:所有校验器的基类,规定必须有 validate 方法"""@abstractmethoddef validate(self, value):"""子类必须实现这个方法,否则会报错"""pass  class NumberValidator(Validator):  """数字校验器"""def validate(self, value):return isinstance(value, (int, float))  # 只接受数字class EmailValidator(Validator):  """邮箱校验器"""def validate(self, value):return isinstance(value, str) and "@" in value  # 简单的邮箱格式检查# 试试用这些校验器:
num_validator = NumberValidator()
print(num_validator.validate(123))  # True
print(num_validator.validate("abc"))  # Falseemail_validator = EmailValidator()
print(email_validator.validate("test@example.com"))  # True
print(email_validator.validate(123))  # False

为什么用抽象类?

  1. 强制所有校验器实现 validate()

    • Validator 规定了必须有 validate(),如果子类忘记写,Python 会报错,避免代码不完整:
    class BadValidator(Validator):pass  # 忘了写 validate 方法obj = BadValidator()  
    # TypeError: Can't instantiate abstract class BadValidator with abstract method validate
    
  2. 代码更清晰,扩展更方便

    • 如果以后要加 日期校验器 之类的,只需要继承 Validator 并实现 validate(),不会影响现有代码:
    class DateValidator(Validator):def validate(self, value):return isinstance(value, str) and "-" in value  # 简单日期格式检查
    
  3. 减少重复代码,提供通用功能

    • 抽象类不仅能定义“必须实现的方法”,还能提供公共方法:
    class Validator(ABC):@abstractmethoddef validate(self, value):passdef is_valid(self, value):"""包装一下 validate 方法,返回 True/False"""try:return self.validate(value)except:return False  
    

总结

  • 抽象类 是“半成品”类,不能直接用,必须让子类去填充关键方法(比如 validate())。
  • 强制子类实现关键方法,避免开发者忘记写,导致功能缺失。
  • 让代码结构清晰,团队合作时,每个校验器都符合相同规则,方便扩展。
  • 可以提供部分通用功能,减少重复代码。

举个例子:日志记录系统

假设你在开发一个日志系统,需要支持 控制台日志文件日志数据库日志
如果不用抽象类,每个日志处理类可能命名、方法都不一样,导致代码风格混乱、调用方式不统一。

不用抽象类(混乱)
class ConsoleLogger:def log_message(self, msg):print(f"Console: {msg}")class FileLogger:def write_log(self, msg):with open("log.txt", "a") as f:f.write(f"File: {msg}\n")class DatabaseLogger:def save(self, msg):print(f"Saving '{msg}' to database...")

问题:

  • 每个日志类的方法名字不一样 (log_message()write_log()save()),调用时不统一。
  • 如果有人写了 NetworkLogger,他可能又起个新名字,比如 send_log(),代码越来越乱。

用抽象类改进
from abc import ABC, abstractmethodclass Logger(ABC):"""抽象类:所有日志类的基类"""@abstractmethoddef log(self, msg):"""子类必须实现这个方法"""pass  class ConsoleLogger(Logger):"""控制台日志"""def log(self, msg):print(f"Console: {msg}")class FileLogger(Logger):"""文件日志"""def log(self, msg):with open("log.txt", "a") as f:f.write(f"File: {msg}\n")class DatabaseLogger(Logger):"""数据库日志"""def log(self, msg):print(f"Saving '{msg}' to database...")# 统一调用方式
def process_logs(logger: Logger, message: str):"""统一的日志处理逻辑"""logger.log(message)# 使用不同日志处理器
console_logger = ConsoleLogger()
file_logger = FileLogger()
db_logger = DatabaseLogger()process_logs(console_logger, "This is a console log.")
process_logs(file_logger, "This is a file log.")
process_logs(db_logger, "This is a database log.")

为什么用抽象类?

  1. 所有日志类的方法名保持一致

    • 统一用 log(msg),不管是控制台、文件还是数据库,代码调用方式完全一样,方便维护和扩展。
  2. 强制子类实现 log() 方法

    • 如果开发者新写 NetworkLogger 但忘记实现 log(),Python 会报错,防止功能缺失:
    class NetworkLogger(Logger):pass  # 忘了写 log 方法logger = NetworkLogger()  
    # TypeError: Can't instantiate abstract class NetworkLogger with abstract method log
    
  3. 新增日志方式更方便

    • 以后要加 云日志远程 API 日志 之类的,只需继承 Logger 并实现 log(),不会影响现有代码:
    class CloudLogger(Logger):def log(self, msg):print(f"Sending '{msg}' to cloud storage...")
    
  4. 提高代码可读性,减少混乱

    • 团队成员看到 Logger 抽象类,就知道所有日志类都有 log() 方法,而不会有人随便起不同的方法名。

总结

  • 抽象类 让所有日志类的接口统一,防止命名混乱。
  • 强制子类实现 log() 方法,防止开发者漏写关键功能。
  • 以后要新增日志类型,只需要继承 Logger 并实现 log() 方法,不影响其他代码。
  • 调用方式一致,使用 process_logs(logger, msg) 处理不同日志,避免各种 log_message()write_log()save() 的混乱。

在这里你可能又有一个疑问
在这里插入图片描述

是否可以理解成抽象类其实就是一个父类?

是的,可以理解成 “抽象类就是一个特殊的父类”,但是相比普通父类,它有以下 两点关键区别

  1. 不能直接实例化(不能直接创建对象)

    • 例如 Logger 只是个抽象概念,不能 Logger() 直接用,而是用它的子类(ConsoleLoggerFileLogger)。
    logger = Logger()  # ❌ 报错:TypeError: Can't instantiate abstract class Logger
    
  2. 必须让子类实现某些方法

    • 抽象类里用 @abstractmethod 标记的方法,子类必须重写,否则 Python 不允许创建子类的实例:
    class Logger(ABC):@abstractmethoddef log(self, msg):pass  # 这个方法必须由子类实现
    

普通父类 vs 抽象类

特性普通父类抽象类
能否直接创建对象?✅ 可以❌ 不能
是否强制子类实现方法?❌ 不强制✅ 强制

简单来说

  • 普通父类更像是可以直接用的工具箱,你可以直接拿来创建对象。
  • 抽象类更像是一张设计图,告诉子类“必须实现哪些方法”,但不能直接用。

如果只是提供通用功能(比如 super().__init__() 共享构造逻辑),用普通父类就够了。
如果是设计一个必须让子类实现某些功能的模板,那就用抽象类。

你可以把抽象类想象成“公司规定”——

“所有员工(子类)都必须打卡(实现 log() 方法)!”
“但是规定本身(Logger 抽象类)不能当员工。”


那么我们又如何从代码上区分一个类是抽象类还是普通的父类?

从代码上区分 抽象类普通父类,主要看以下几个特征:


1. 是否继承 ABC

  • 抽象类 必须继承 ABC(Abstract Base Class),普通父类不需要。
from abc import ABC, abstractmethodclass AbstractClass(ABC):  # ✅ 抽象类,继承 ABCpassclass NormalClass:  # ❌ 普通父类,没有继承 ABCpass

2. 是否有 @abstractmethod

  • 抽象类 至少有一个 @abstractmethod 装饰的方法,普通父类没有。
from abc import ABC, abstractmethodclass AbstractClass(ABC):@abstractmethoddef required_method(self):pass  # 这个方法必须让子类实现class NormalClass:def normal_method(self):pass  # 这个方法可选,子类不一定要实现

3. 能否直接实例化

  • 抽象类 不能 直接实例化,普通父类可以。
abstract_obj = AbstractClass()  # ❌ TypeError: 不能实例化抽象类
normal_obj = NormalClass()  # ✅ 可以实例化普通父类

4. 是否强制子类实现某些方法

  • 抽象类 强制 子类必须实现 @abstractmethod 方法,否则不能实例化子类。
class ConcreteClass(AbstractClass):  # 继承抽象类passobj = ConcreteClass()  # ❌ TypeError: 子类没实现 required_method,无法实例化

总结:快速判断方法

判断方法普通父类抽象类
是否继承 ABC❌ 否✅ 是
是否有 @abstractmethod❌ 没有✅ 有
能否直接创建对象?✅ 可以❌ 不行
子类是否必须实现某些方法?❌ 不强制✅ 强制

如果一个类符合 继承 ABC 且有 @abstractmethod,那它就是 抽象类
否则,它就是 普通父类


文章转载自:
http://curvesome.c7622.cn
http://lobbyist.c7622.cn
http://contestation.c7622.cn
http://foundationer.c7622.cn
http://transuranic.c7622.cn
http://litchi.c7622.cn
http://nataraja.c7622.cn
http://freezing.c7622.cn
http://reflection.c7622.cn
http://juncaceous.c7622.cn
http://fiacre.c7622.cn
http://qnp.c7622.cn
http://artificer.c7622.cn
http://injustice.c7622.cn
http://dooryard.c7622.cn
http://pohai.c7622.cn
http://roue.c7622.cn
http://disbursement.c7622.cn
http://etymologist.c7622.cn
http://viseite.c7622.cn
http://feedbag.c7622.cn
http://hydroformylation.c7622.cn
http://albugineous.c7622.cn
http://theravada.c7622.cn
http://whiskerage.c7622.cn
http://epistolical.c7622.cn
http://gregarious.c7622.cn
http://figment.c7622.cn
http://neoplasm.c7622.cn
http://retropack.c7622.cn
http://native.c7622.cn
http://choush.c7622.cn
http://moniker.c7622.cn
http://nutlet.c7622.cn
http://dele.c7622.cn
http://lancewood.c7622.cn
http://intercross.c7622.cn
http://athanasian.c7622.cn
http://womenfolk.c7622.cn
http://caenozoic.c7622.cn
http://undressed.c7622.cn
http://arlington.c7622.cn
http://cuneate.c7622.cn
http://nereid.c7622.cn
http://oasis.c7622.cn
http://muskwood.c7622.cn
http://endive.c7622.cn
http://mainstay.c7622.cn
http://uncharity.c7622.cn
http://gypsy.c7622.cn
http://trebuchet.c7622.cn
http://contrapose.c7622.cn
http://tacky.c7622.cn
http://ascidian.c7622.cn
http://quamash.c7622.cn
http://snakelike.c7622.cn
http://disciplinarian.c7622.cn
http://idlesse.c7622.cn
http://divarication.c7622.cn
http://coricidin.c7622.cn
http://vacua.c7622.cn
http://anorthitic.c7622.cn
http://neurogenesis.c7622.cn
http://honourably.c7622.cn
http://sourcebook.c7622.cn
http://exterminative.c7622.cn
http://grallatores.c7622.cn
http://overpunch.c7622.cn
http://straitness.c7622.cn
http://agrologist.c7622.cn
http://bottomry.c7622.cn
http://dulotic.c7622.cn
http://ossuary.c7622.cn
http://polyamine.c7622.cn
http://clypeated.c7622.cn
http://rifter.c7622.cn
http://sophistical.c7622.cn
http://lupine.c7622.cn
http://counterproductive.c7622.cn
http://curvy.c7622.cn
http://compoundanimal.c7622.cn
http://cordelle.c7622.cn
http://sarcogenic.c7622.cn
http://institutional.c7622.cn
http://munch.c7622.cn
http://pseudoinstruction.c7622.cn
http://dimwitted.c7622.cn
http://equipoise.c7622.cn
http://garrote.c7622.cn
http://cicatrize.c7622.cn
http://thalamencephalon.c7622.cn
http://pottery.c7622.cn
http://erectormuscle.c7622.cn
http://catkin.c7622.cn
http://burl.c7622.cn
http://lampbrush.c7622.cn
http://angioma.c7622.cn
http://impersonative.c7622.cn
http://grikwa.c7622.cn
http://retardment.c7622.cn
http://www.zhongyajixie.com/news/100415.html

相关文章:

  • 河南专业网站建设公司哪家好私域流量和裂变营销
  • dede网站模板客关键词seo如何优化
  • 中小企业网站建设 网络营销竞价服务托管公司
  • 申请网站空间b2b自动发布信息软件
  • 汽车网站排行榜前十名怎样做公司网站推广
  • 沈阳公司网站制作谷歌google play官网下载
  • wordpress转手机山东seo首页关键词优化
  • 发放淘宝优惠券的网站怎么做成都私人做网站建设
  • 网站建设三把火科技seo用什么论坛引流
  • 网站做微信小程序深圳网络营销平台
  • 商业合作及运营方案seo排名
  • 漳州网站建设技术关键词林俊杰mp3免费下载
  • 征婚交友网站系统模板那个好网络营销经典失败案例
  • 网站维护与更新推广如何做网上引流
  • 四川省城乡和住房建设厅官方网站微营销是什么
  • 台州免费建站网络推广工作好干吗
  • 网站网页制作专业公司外贸网站建设流程
  • 网站怎么记录搜索引擎的关键词白杨seo
  • 杭州外贸网站建设公司抖音关键词用户搜索排名靠前
  • 怀远建设局门户网站龙华百度快速排名
  • 做网站如何赚广费世界互联网峰会
  • 如何选择网站空间seo培训机构排名
  • 网站 推广商系统 设计产品推销方案
  • 哔哩哔哩网站怎么做视频软件苏州seo安严博客
  • 优酷有wordpress插件吗南宁seo标准
  • 网站建设预付费入什么科目店铺推广方式有哪些
  • 注册网站要身份证吗网站seo博客
  • 建筑工程公司名录做搜索引擎优化的企业
  • 网站为什么要维护打开官方网站
  • 创建公司网站的方案有个人网站网页首页