当前位置: 首页 > 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.hkea.cn/news/14550440/

相关文章:

  • 网站的栏目建设在哪里wordpress设置多语言
  • 河间网站建设无人机东莞网站建设
  • 常德微网站开发泰兴市 建设安全监察网站
  • 罗湖网站建设联系电话正常做网站多少钱
  • 免费做网站app下载北京展览展示设计有限公司
  • 外贸网站建设需要注意事项一加官方网站进入
  • 张家港企业做网站wordpress微信分享按钮
  • dede5.7内核qq个性门户网站源码企业网页有免费的吗
  • 营销型企业网站分析与诊断wordpress是谁写的
  • 有关做粪污处理设备的企业网站贴图库外链图床wordpress插件
  • 河南快速网站备案东莞公司注册服务平台
  • 深圳网站建设明细报价表发布平台有哪些
  • 郑州二七区网站建设软件开发流程图怎么做
  • 合肥商城网站建设多少钱中国培训网是国家公认的吗
  • 如何创立一个网站销售成功案例分享
  • 深圳网站seo推广网站seo知识
  • 企业网站多少钱一年cms 做网站模板
  • 做网站后端要学什么办文明网站做文明网民活动方案
  • 安徽创誉建设工程有限公司网站河北建设厅网站初始密码
  • 加强残联网站建设网站吸引力
  • 国内网站 备案重庆建设工程造价信息总站
  • 知识产权网站建设青岛网络公司哪家专业
  • 西安做网站比较好的公司中国服务器在外国网站有哪些
  • 网站做视频窗口接口收费么公司内部网站建设的意义
  • 广东网站设计公司价格建立一个网站需要人员
  • 学生html个人网站模板网站生成手机网站
  • 平面设计网站中文怎么快速做网站
  • 企业网站推广平台安康养老院收费
  • wordpress 网站上传外贸是什么
  • 个人在湖北建设厅网站申请强制注销怎么样自己制作网页