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

机械网站案例网站开发课设个人总结

机械网站案例,网站开发课设个人总结,怎么开发一个网站,泉州网站建设轩奇网讯抽象类在项目中的实际应用主要体现在 规范代码结构、强制子类实现某些方法、提供部分通用功能#xff0c;让代码更稳定、易维护。 举个例子#xff1a;数据校验器 假设你在做一个 用户输入校验系统#xff0c;需要支持 数字校验、字符串校验 和 邮箱校验。如果不用抽象类让代码更稳定、易维护。 举个例子数据校验器 假设你在做一个 用户输入校验系统需要支持 数字校验、字符串校验 和 邮箱校验。如果不用抽象类每个校验器都会自己定义 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(testexample.com)) # True print(email_validator.validate(123)) # False为什么用抽象类 强制所有校验器实现 validate() Validator 规定了必须有 validate()如果子类忘记写Python 会报错避免代码不完整 class BadValidator(Validator):pass # 忘了写 validate 方法obj BadValidator() # TypeError: Cant instantiate abstract class BadValidator with abstract method validate代码更清晰扩展更方便 如果以后要加 日期校验器 之类的只需要继承 Validator 并实现 validate()不会影响现有代码 class DateValidator(Validator):def validate(self, value):return isinstance(value, str) and - in value # 简单日期格式检查减少重复代码提供通用功能 抽象类不仅能定义“必须实现的方法”还能提供公共方法 class Validator(ABC):abstractmethoddef validate(self, value):passdef is_valid(self, value):包装一下 validate 方法返回 True/Falsetry:return self.validate(value)except:return False 总结 抽象类 是“半成品”类不能直接用必须让子类去填充关键方法比如 validate()。强制子类实现关键方法避免开发者忘记写导致功能缺失。让代码结构清晰团队合作时每个校验器都符合相同规则方便扩展。可以提供部分通用功能减少重复代码。 举个例子日志记录系统 假设你在开发一个日志系统需要支持 控制台日志、文件日志 和 数据库日志。 如果不用抽象类每个日志处理类可能命名、方法都不一样导致代码风格混乱、调用方式不统一。 不用抽象类混乱 class ConsoleLogger:def log_message(self, msg):print(fConsole: {msg})class FileLogger:def write_log(self, msg):with open(log.txt, a) as f:f.write(fFile: {msg}\n)class DatabaseLogger:def save(self, msg):print(fSaving {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(fConsole: {msg})class FileLogger(Logger):文件日志def log(self, msg):with open(log.txt, a) as f:f.write(fFile: {msg}\n)class DatabaseLogger(Logger):数据库日志def log(self, msg):print(fSaving {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.)为什么用抽象类 所有日志类的方法名保持一致 统一用 log(msg)不管是控制台、文件还是数据库代码调用方式完全一样方便维护和扩展。 强制子类实现 log() 方法 如果开发者新写 NetworkLogger 但忘记实现 log()Python 会报错防止功能缺失 class NetworkLogger(Logger):pass # 忘了写 log 方法logger NetworkLogger() # TypeError: Cant instantiate abstract class NetworkLogger with abstract method log新增日志方式更方便 以后要加 云日志、远程 API 日志 之类的只需继承 Logger 并实现 log()不会影响现有代码 class CloudLogger(Logger):def log(self, msg):print(fSending {msg} to cloud storage...)提高代码可读性减少混乱 团队成员看到 Logger 抽象类就知道所有日志类都有 log() 方法而不会有人随便起不同的方法名。 总结 抽象类 让所有日志类的接口统一防止命名混乱。强制子类实现 log() 方法防止开发者漏写关键功能。以后要新增日志类型只需要继承 Logger 并实现 log() 方法不影响其他代码。调用方式一致使用 process_logs(logger, msg) 处理不同日志避免各种 log_message()、write_log()、save() 的混乱。 在这里你可能又有一个疑问 是否可以理解成抽象类其实就是一个父类 是的可以理解成 “抽象类就是一个特殊的父类”但是相比普通父类它有以下 两点关键区别 不能直接实例化不能直接创建对象 例如 Logger 只是个抽象概念不能 Logger() 直接用而是用它的子类ConsoleLogger、FileLogger。 logger Logger() # ❌ 报错TypeError: Cant instantiate abstract class Logger必须让子类实现某些方法 抽象类里用 abstractmethod 标记的方法子类必须重写否则 Python 不允许创建子类的实例 class Logger(ABC):abstractmethoddef log(self, msg):pass # 这个方法必须由子类实现普通父类 vs 抽象类 特性普通父类抽象类能否直接创建对象✅ 可以❌ 不能是否强制子类实现方法❌ 不强制✅ 强制 简单来说 普通父类更像是可以直接用的工具箱你可以直接拿来创建对象。抽象类更像是一张设计图告诉子类“必须实现哪些方法”但不能直接用。 如果只是提供通用功能比如 super().__init__() 共享构造逻辑用普通父类就够了。 如果是设计一个必须让子类实现某些功能的模板那就用抽象类。 你可以把抽象类想象成“公司规定”—— “所有员工子类都必须打卡实现 log() 方法” “但是规定本身Logger 抽象类不能当员工。” 那么我们又如何从代码上区分一个类是抽象类还是普通的父类 从代码上区分 抽象类 和 普通父类主要看以下几个特征 1. 是否继承 ABC 抽象类 必须继承 ABCAbstract Base Class普通父类不需要。 from abc import ABC, abstractmethodclass AbstractClass(ABC): # ✅ 抽象类继承 ABCpassclass NormalClass: # ❌ 普通父类没有继承 ABCpass2. 是否有 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://www.tj-hxxt.cn/news/225523.html

相关文章:

  • 珠海网站建设熊掌号怎样免费做一个网站
  • 石家庄网站编辑郑州 发布会
  • 自由型网站网站建设好弄不好弄
  • 58同城 网站建设 推广排名教务系统管理
  • 建设企业网站需要使用哪些技术网站建设方案行业
  • 怎么可以联系到网站开发者网站备案产品信息错误
  • 网站建设与运营市场开拓方案大连三丰建设集团公司网站
  • 网站建设开什么名目电子商务网站开发与应用论文
  • 做网站要主机还是服务器那些做电影的网站赚钱吗
  • 网站建设有什么注意宿州科技网站建设
  • 美食网站html静态域名解析要登入哪个网站做
  • 宁波哪里有做网站的网站的建设原始代码
  • 北京最大做网站的公司网页版qq邮箱登录
  • 甘肃建网站长沙微信网站建设
  • 做淘宝客网站流量选择福州移动网站建设
  • 在万网申请的域名_需要把万网的账户密码给做网站的吗淄博网站设计制作
  • 福建网站开发有限开发公司wordpress 504
  • 东莞网站建设公司辉煌大厦怎样创建网站和网页
  • 天津网站建设好公司做网站投资太大 网站也没搞起来
  • 电子商务网站规划 分析 设计阜阳网页
  • 做网站需要备注号码沧州网站设计报价
  • 网站网页相关概念二手房交易网站排名
  • 做网站需要域名 域名是啥aso优化教程
  • 平面设计大赛网站最专业的网站建设收费
  • 天津城乡住房建设厅网站首页长沙做网站智投未来
  • 建设网站多久手机网站平均打开速度
  • 淘宝网发布网站建设网站没排名要怎么做
  • 外贸 网站设计公司北京网站建设策划排名
  • c 可以做网站吗海外推广媒体
  • 建设网站设计公司茂名h5网站建设