

Python,速成心法
敲代码,查资料,问Ai
练习,探索,总结,优化

★★★★★博文创作不易,源码代码的过程中,如有疑问的地方,欢迎大家指正留言交流。喜欢的老铁可以多多点赞+收藏分享+置顶,小红牛在此表示感谢。★★★★★
Python打包教程07:还不会用--add-data参数,添加资源文件吗?
Python打包教程04:UPX安装与使用(减小.exe体积)
Python打包教程03:PyInstaller命令使用指南
Python查询CPU+硬盘+网卡MAC +主板+BIOS序列号
Python教程:PyCharm安装过程中遇到的中英文对照表
Python教程110:单线程和多线程源码演示(threading)
Python教程108:针对面向对象Class类知识要点,源码示例再演示。
Python入门教程04:流程控制语句(if+for+continue等)
Python教程:3种格式符(str.format()+f-string+%)的常见用法


姓名:张三,工资:5000,ID:1姓名:王经理,工资:10000,ID:3,奖金:3000公司:ABC科技,员工总数:3False50005500警告:不能删除工资,已忽略操作Employee(张三)Employee('张三', 5500)True姓名:张三,工资:5500,ID:1姓名:李四,工资:6000,ID:2姓名:王经理,工资:10000,ID:3,奖金:3000李四 涨薪 500 元,现工资 65001
↓ 完整源码如下 ↓
# -*- coding: utf-8 -*-# @Author : 小红牛# 微信公众号:wdPythonclass Employee:"""员工基类"""# 类变量:所有实例共享company = "ABC科技"employee_count = 0def __init__(self, name, salary):"""构造方法:初始化实例属性"""self.name = name # 公有属性self._salary = salary # 受保护属性(约定)self.__id = Employee.employee_count + 1 # 私有属性(名称修饰)Employee.employee_count += 1# 实例方法:操作实例属性def get_info(self):return f"姓名:{self.name},工资:{self._salary},ID:{self.__id}"# 类方法:操作类变量,使用 @classmethod@classmethoddef get_company_info(cls):return f"公司:{cls.company},员工总数:{cls.employee_count}"# 静态方法:与类相关但无需访问实例/类属性,使用 @staticmethod@staticmethoddef is_workday(day):"""判断某天是否为工作日(简单示例)"""return day.weekday() < 5 # 周一=0,周日=6# 属性(property):将方法当作属性访问,可控制读写@propertydef salary(self):"""工资的 getter"""return self._salary@salary.setterdef salary(self, value):"""工资的 setter:增加校验逻辑"""if value < 0:raise ValueError("工资不能为负数")self._salary = value@salary.deleterdef salary(self):"""允许删除 salary(实际不会删除真实数据)"""print("警告:不能删除工资,已忽略操作")# 特殊方法:自定义对象的表现形式def __str__(self):"""面向用户的字符串表示(print() 调用)"""return f"Employee({self.name})"def __repr__(self):"""面向开发者的字符串表示(交互式环境直接显示)"""return f"Employee('{self.name}', {self._salary})"def __eq__(self, other):"""定义 == 的行为:根据姓名和工资判断相等性"""if not isinstance(other, Employee):return NotImplementedreturn self.name == other.name and self._salary == other._salary# --------------------------------------------# 2. 子类:Manager(继承 Employee)# --------------------------------------------class Manager(Employee):"""经理类,继承自 Employee"""def __init__(self, name, salary, bonus):# 调用父类构造方法super().__init__(name, salary)self.bonus = bonus# 重写父类方法(多态)def get_info(self):# 复用父类逻辑并扩展base_info = super().get_info()return f"{base_info},奖金:{self.bonus}"# 添加新的实例方法def give_raise(self, employee, amount):"""给指定员工涨工资(示例方法)"""if isinstance(employee, Employee):employee.salary += amountprint(f"{employee.name} 涨薪 {amount} 元,现工资 {employee.salary}")else:raise TypeError("只能给 Employee 实例涨薪")# --------------------------------------------# 3. 演示类与对象的使用# --------------------------------------------if __name__ == "__main__":# ---------- 创建实例 ----------emp1 = Employee("张三", 5000)emp2 = Employee("李四", 6000)mgr = Manager("王经理", 10000, 3000)# ---------- 实例方法 ----------print(emp1.get_info()) # 姓名:张三,工资:5000,ID:1print(mgr.get_info()) # 姓名:王经理,工资:10000,ID:3,奖金:3000# ---------- 类方法和静态方法 ----------print(Employee.get_company_info()) # 公司:ABC科技,员工总数:3import datetimeprint(Employee.is_workday(datetime.date(2026, 5, 31))) # 假设周日,输出 False# ---------- 属性 property ----------print(emp1.salary) # 5000emp1.salary = 5500print(emp1.salary) # 5500# emp1.salary = -100 # 触发 ValueError: 工资不能为负数del emp1.salary # 警告:不能删除工资,已忽略操作# ---------- 特殊方法 ----------print(str(emp1)) # Employee(张三)print(repr(emp1)) # Employee('张三', 5500)emp3 = Employee("张三", 5500)print(emp1 == emp3) # True(因为姓名和工资相同)# ---------- 多态 ----------employees = [emp1, emp2, mgr]for e in employees:# 无论是 Employee 还是 Manager,都能调用 get_info()print(e.get_info())# ---------- 子类特有方法 ----------mgr.give_raise(emp2, 500) # 李四 涨薪 500 元,现工资 6500# ---------- 访问私有属性(不推荐,但可以绕过)----------# print(emp1.__id) # 报错 AttributeErrorprint(emp1._Employee__id) # 1(名称修饰后仍可访问,仅用于特殊场景)
完毕!!感谢您的收看
------★★历史博文集合★★------
