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

Python 类、对象、继承、方法 的一些使用技巧

Python 类、对象、继承、方法 的一些使用技巧

一、类与对象的核心概念

  • __init__ 是构造方法(创建对象时自动执行)
  • self 代表实例对象本身
  • 属性和方法都通过 self 访问
class Person:def __init__(self, name, age):  # 构造函数(初始化对象)self.name = nameself.age = agedef say_hello(self):print(f"Hi, I'm {self.name}, {self.age} years old.")# 创建对象
p = Person("Alice", 25)
p.say_hello()

二、类变量 vs 实例变量

  • 类变量适合存放共享状态
  • 实例变量用于对象独有属性
  • vars(obj) 可以查看对象的属性字典
class Dog:species = "Canine"  # 类变量(所有实例共享)def __init__(self, name):self.name = name  # 实例变量(每个实例独立)a = Dog("Buddy")
b = Dog("Rocky")print(a.species, b.species)  # 都是 "Canine"
a.species = "Wolf"           # 只在 a 实例中修改
print(a.species, b.species)  # Wolf, Canine

三、类方法与静态方法(@classmethod / @staticmethod)

区别总结:

类型 第一个参数 访问类变量 访问实例变量 调用方式
普通方法 self Yes Yes 实例调用
类方法 cls Yes No 类或实例调用
静态方法 No No 类或实例调用
class Circle:pi = 3.14159def __init__(self, r):self.r = r@classmethoddef unit_circle(cls):return cls(1)@staticmethoddef area(r):return 3.14159 * r * rc1 = Circle(5)
c2 = Circle.unit_circle()     # 调用类方法创建半径为1的圆
print(Circle.area(3))         # 静态方法不依赖实例

四、继承与方法重写

  • super() 用于调用父类方法(推荐用在子类重写中)
  • 子类可以新增方法或属性
  • Python 支持多继承(谨慎使用)
class Animal:def speak(self):print("Animal sound")class Dog(Animal):def speak(self):super().speak()  # 调用父类方法print("Woof!")d = Dog()
d.speak()# 输出
Animal sound
Woof!

五、多继承与 MRO(方法解析顺序)

MRO(Method Resolution Order)解释:

  • 按「从左到右」顺序搜索方法
  • 避免菱形继承重复调用
  • 可通过 类名.mro() 查看解析顺序
class A:def show(self): print("A")class B(A):def show(self): print("B")class C(A):def show(self): print("C")class D(B, C): passd = D()
d.show()
print(D.mro())  # [D, B, C, A, object]

六、属性访问控制(私有变量)

  • __ 开头的变量被“名称改写”(Name Mangling)
  • 实际存储名: _Account__balance
  • 并非真正私有,只是防止误用
class Account:def __init__(self, balance):self.__balance = balance  # 私有属性def deposit(self, amount):self.__balance += amountdef get_balance(self):return self.__balancea = Account(100)
a.deposit(50)
print(a.get_balance())
# print(a.__balance)  # ❌ 无法直接访问

七、属性封装与 @property

  • 让属性像普通变量一样访问,但内部逻辑可控
  • 避免直接暴露内部实现
  • 可添加 setter、deleter 控制写入、删除行为
class Temperature:def __init__(self, celsius):self._celsius = celsius@propertydef fahrenheit(self):return self._celsius * 9/5 + 32@fahrenheit.setterdef fahrenheit(self, value):self._celsius = (value - 32) * 5/9t = Temperature(0)
print(t.fahrenheit)  # 32.0
t.fahrenheit = 212
print(t._celsius)    # 100.0

八、特殊方法(魔法方法)

常见魔法方法:

方法 作用
__init__ 初始化对象
__str__ / __repr__ 打印显示
__len__ len() 调用
__add__ / __sub__ / __mul__ 运算符重载
__getitem__ 支持下标访问
__iter__ / __next__ 支持迭代

这些方法让类更「像内建类型」使用:

class Vector:def __init__(self, x, y):self.x, self.y = x, ydef __repr__(self):return f"Vector({self.x}, {self.y})"def __add__(self, other):return Vector(self.x + other.x, self.y + other.y)def __len__(self):return int((self.x**2 + self.y**2) ** 0.5)v1 = Vector(3, 4)
v2 = Vector(1, 2)
print(v1 + v2)   # Vector(4, 6)
print(len(v1))   # 5

九、抽象类与接口(abc 模块)

  • ABC 是抽象基类
  • @abstractmethod 必须被子类实现
  • 用于定义「统一接口」的规范
from abc import ABC, abstractmethodclass Animal(ABC):@abstractmethoddef make_sound(self):passclass Dog(Animal):def make_sound(self):print("Woof!")d = Dog()
d.make_sound()

十、类的高级技巧

1.动态添加属性和方法

class User:passu = User()
u.name = "Alice"
u.say = lambda: print("Hi")
u.say()

2.自定义元类(MetaClass,少用)

控制类的创建逻辑,用于框架级开发(如 Django ORM)

实战例子:员工系统

from abc import ABC, abstractmethodclass Employee(ABC):def __init__(self, name, salary):self.name = nameself.salary = salary@abstractmethoddef get_bonus(self):passclass Developer(Employee):def get_bonus(self):return self.salary * 0.10class Manager(Employee):def get_bonus(self):return self.salary * 0.25employees = [Developer("Tom", 8000), Manager("Alice", 15000)]
for e in employees:print(f"{e.name} bonus: {e.get_bonus()}")

本文章的原文地址
GitHub主页

http://www.hskmm.com/?act=detail&tid=37432

相关文章:

  • Python 列表、字典、集合、生成器、迭代器 的一些使用技巧
  • 上海AI短视频获客企业口碑榜:技术实力、服务案例及市场覆盖率的深度解析
  • 【为美好CTF献上祝福】杂项笔记
  • 权威调研榜单:扬州公考笔试机构TOP3榜单好评深度解析
  • PyOCD使用指南
  • 嵌入式主板全景解析:从选型到趋势,读懂工业智能的核心载体
  • 2025 年唐山油漆生产厂家最新推荐榜单:精选优质企业,解析专业品牌选购指南唐山油漆批发/唐山油漆生产公司推荐
  • vscode创建快捷代码块,同时配置vue2和vue3的快捷代码块
  • DolphinScheduler依赖机制、Open-Falcon告警推送与监控的优化实践
  • Tailwind CSS 使用入门
  • 2025 年托管班加盟品牌最新推荐排行榜:聚焦国内优质机构,为投资者精选靠谱加盟项目托管班机构加盟/儿童托管班中心加盟/课后托管班加盟/小学托管班加盟连锁推荐
  • 终于能打出生僻字了!麒麟系统搜狗输入法完整安装指南 - 实践
  • docker 离线下载安装部署
  • 第六周第二天6.2
  • godot + Avalonia 渲染第三方UI
  • 国标GB28181算法算力平台EasyGBS的云边协同的算力调度模式关键技术解析
  • 2025-10-23 cocos安装
  • 监控系统搭建集成实例
  • WPF 和 Avalonia 开发者的 html css 前端指南 ScrollViewer 篇
  • 用EasyPlayer播国标GB28181算法算力平台EasyGBS视频流,居然比点外卖还简单
  • 2025 年氙灯老化 / 紫外老化 / 冷热冲击 / 恒温恒湿 / 高低温 / 快速温变试验箱厂家推荐:柳沁仪器,多行业检测设备的优质供应伙伴
  • 测试美化效果
  • CF1140E Palindrome-less Arrays
  • Windows Server 2016 中文版、英文版下载 (2025 年 10 月更新)
  • 2025年护栏厂家权威推荐榜单:不锈钢栏杆、桥梁防撞护栏、河道景观护栏等全品类生产供应商精选
  • Windows Server 2022 中文版、英文版下载 (2025 年 10 月更新)
  • Windows Server 2025 中文版、英文版下载 (2025 年 10 月更新)
  • 零样本学习(Zero-Shot Learning‌)
  • mac安装stable diffusion简易部署
  • 视频汇聚平台EasyCVR如何构建智慧农业监控监管系统? - 实践