<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom">
  <channel>
    <title>OOP on 老张开工了</title>
    <link>/oop/</link>
    <description>Recent content in OOP on 老张开工了</description>
    <generator>Hugo</generator>
    <language>zh-cn</language>
    <lastBuildDate>Wed, 20 May 2026 00:00:00 +0000</lastBuildDate>
    <atom:link href="/oop/index.xml" rel="self" type="application/rss+xml" />
    <item>
      <title>迭代器与生成器</title>
      <link>/posts/2026/05/iterators-generators/</link>
      <pubDate>Wed, 20 May 2026 00:00:00 +0000</pubDate>
      <guid>/posts/2026/05/iterators-generators/</guid>
      <description>迭代（Iteration）是编程中最基础也最重要的操作之一。Python 通过迭代器协议和生成器提供了强大而优雅的迭代机制。理解迭代器和生成器，不仅能让你写出更高效的代码，还能掌握处理大数据集和无限序列的能力。&#xA;迭代基础 可迭代对象 vs 迭代器 理解这两个概念是掌握 Python 迭代的基础：&#xA;from typing import Iterable, Iterator # 可迭代对象（Iterable）：可以用于 for 循环的对象 # 实现了 __iter__() 方法，返回一个迭代器 # 迭代器（Iterator）：负责产生数据的对象 # 实现了 __iter__() 和 __next__() 方法 # 常见可迭代对象 print(isinstance([], Iterable)) # True print(isinstance({}, Iterable)) # True print(isinstance(&amp;#34;hello&amp;#34;, Iterable)) # True print(isinstance(range(10), Iterable)) # True # 列表是可迭代对象，但不是迭代器 print(isinstance([], Iterator)) # False for 循环内部原理 # Python 的 for 循环等价于以下过程： # 你写的代码 for item in [1, 2, 3]: print(item) # Python 实际执行的代码 _iter = iter([1, 2, 3]) # 获取迭代器 while True: try: item = next(_iter) # 获取下一个值 print(item) except StopIteration: # 没有更多元素 break 理解这个机制很重要——它解释了为什么迭代器是惰性的（按需生成数据）以及为什么可迭代对象可以用于 for 循环。</description>
    </item>
    <item>
      <title>上下文管理器与 with 语句</title>
      <link>/posts/2026/05/context-managers/</link>
      <pubDate>Tue, 19 May 2026 00:00:00 +0000</pubDate>
      <guid>/posts/2026/05/context-managers/</guid>
      <description>上下文管理器（Context Manager）是 Python 中用于资源管理的核心机制。无论你是在读写文件、获取锁、打开数据库连接还是管理网络会话——with 语句都能确保资源被正确释放，即使发生异常也不例外。&#xA;为什么需要上下文管理器 传统方式的痛点 来看一个常见的文件操作：&#xA;# 传统方式：容易忘记关闭文件 f = open(&amp;#34;data.txt&amp;#34;, &amp;#34;r&amp;#34;) content = f.read() f.close() # 如果前面的代码抛异常，这一行不会执行！ # 改进：用 try/finally 确保关闭 f = open(&amp;#34;data.txt&amp;#34;, &amp;#34;r&amp;#34;) try: content = f.read() finally: f.close() # 无论是否异常，都会执行 虽然 try/finally 能解决问题，但代码显得冗长。如果每次资源操作都要写 try/finally，不仅繁琐而且容易遗漏。&#xA;使用 with 语句 # with 语句 —— 简洁且安全 with open(&amp;#34;data.txt&amp;#34;, &amp;#34;r&amp;#34;) as f: content = f.read() # 离开 with 块后，文件自动关闭 # 等价于 try/finally，但更简洁 with 语句的工作原理 with 语句的本质是执行上下文管理器的协议：&#xA;with EXPRESSION as VARIABLE: BLOCK 等价于：</description>
    </item>
    <item>
      <title>属性装饰器与 property</title>
      <link>/posts/2026/05/properties-descriptors/</link>
      <pubDate>Mon, 18 May 2026 00:00:00 +0000</pubDate>
      <guid>/posts/2026/05/properties-descriptors/</guid>
      <description>在 Python 中，属性访问是最常见的操作之一。但简单的属性赋值往往不够——你可能需要校验、计算或延迟加载。@property 装饰器和描述符协议提供了优雅的解决方案，让你能在不破坏外部接口的前提下控制属性行为。&#xA;@property 装饰器 从 getter/setter 到 property 我们先看一个传统 getter/setter 的写法：&#xA;class Person: def __init__(self, name: str, age: int): self._name = name self._age = age def get_name(self) -&amp;gt; str: return self._name def set_name(self, value: str) -&amp;gt; None: if not value.strip(): raise ValueError(&amp;#34;Name cannot be empty&amp;#34;) self._name = value p = Person(&amp;#34;Alice&amp;#34;, 30) print(p.get_name()) p.set_name(&amp;#34;Bob&amp;#34;) 这种 Java 风格在 Python 中并不推荐。@property 提供了更 Pythonic 的方式：&#xA;class Person: def __init__(self, name: str, age: int): self.</description>
    </item>
    <item>
      <title>魔法方法与运算符重载</title>
      <link>/posts/2026/05/magic-methods/</link>
      <pubDate>Sun, 17 May 2026 00:00:00 +0000</pubDate>
      <guid>/posts/2026/05/magic-methods/</guid>
      <description>魔法方法（Magic Methods）是 Python 中以双下划线开头和结尾的特殊方法，它们让自定义对象能够与 Python 的内置操作无缝集成。通过实现魔法方法，你可以让自己的类支持 +、[]、len()、for...in 等语法，让代码更加自然和 Pythonic。&#xA;魔法方法概述 魔法方法也被称为 dunder 方法（double underscore 的缩写）。它们不需要手动调用——Python 在特定操作时会自动触发。&#xA;class Demo: def __init__(self, value): self.value = value def __str__(self): return f&amp;#34;Demo({self.value})&amp;#34; def __len__(self): return len(str(self.value)) d = Demo(42) print(str(d)) # 触发 __str__ print(len(d)) # 触发 __len__ 对象的生命周期管理 __new__：真正的构造函数 __new__ 在 __init__ 之前调用，负责创建并返回实例。它通常只在需要控制对象创建时才会被重写：&#xA;class Singleton: &amp;#34;&amp;#34;&amp;#34;单例模式：全局只有一个实例&amp;#34;&amp;#34;&amp;#34; _instance = None def __new__(cls, *args, **kwargs): if cls._instance is None: cls._instance = super().__new__(cls) return cls._instance def __init__(self, value: int): # 注意：每次调用 Singleton() 都会执行 __init__ self.</description>
    </item>
    <item>
      <title>继承与多态</title>
      <link>/posts/2026/05/inheritance-polymorphism/</link>
      <pubDate>Sat, 16 May 2026 00:00:00 +0000</pubDate>
      <guid>/posts/2026/05/inheritance-polymorphism/</guid>
      <description>继承和多态是面向对象编程的核心特性。继承让代码复用成为可能，多态则让代码更加灵活和可扩展。本篇将深入探讨 Python 中的继承机制、多态的实现方式，以及常见的模式与最佳实践。&#xA;继承基础 继承允许一个类（子类）获取另一个类（父类）的属性和方法，从而实现代码复用。&#xA;class Animal: def __init__(self, name: str): self.name = name def eat(self) -&amp;gt; str: return f&amp;#34;{self.name} is eating&amp;#34; def sleep(self) -&amp;gt; str: return f&amp;#34;{self.name} is sleeping&amp;#34; class Dog(Animal): def bark(self) -&amp;gt; str: return f&amp;#34;{self.name} says Woof!&amp;#34; class Cat(Animal): def meow(self) -&amp;gt; str: return f&amp;#34;{self.name} says Meow!&amp;#34; dog = Dog(&amp;#34;Buddy&amp;#34;) cat = Cat(&amp;#34;Kitty&amp;#34;) # 继承的方法 print(dog.eat()) # Buddy is eating print(cat.sleep()) # Kitty is sleeping # 子类特有的方法 print(dog.</description>
    </item>
    <item>
      <title>类与对象基础</title>
      <link>/posts/2026/05/classes-objects/</link>
      <pubDate>Fri, 15 May 2026 00:00:00 +0000</pubDate>
      <guid>/posts/2026/05/classes-objects/</guid>
      <description>面向对象编程（Object-Oriented Programming，OOP）是现代编程中最重要的编程范式之一。Python 从设计之初就是一门面向对象的语言——在 Python 中，一切皆对象。本篇将从最基础的概念开始，带你彻底掌握 Python 中的类与对象。&#xA;面向对象编程概述 面向对象编程的核心思想是：将数据和操作数据的方法封装在一起，形成&amp;quot;对象&amp;quot;。与面向过程编程（以函数为中心）不同，OOP 以&amp;quot;类&amp;quot;和&amp;quot;对象&amp;quot;为中心。&#xA;四大基本特性 封装（Encapsulation）：将数据和内部实现细节隐藏，对外只暴露必要的接口 继承（Inheritance）：子类可以复用父类的属性和方法 多态（Polymorphism）：同一接口在不同对象上表现不同行为 抽象（Abstraction）：隐藏复杂实现，只暴露简化接口 类的定义与实例化 最简单的类 class Dog: &amp;#34;&amp;#34;&amp;#34;一个简单的 Dog 类&amp;#34;&amp;#34;&amp;#34; pass # 实例化对象 my_dog = Dog() print(type(my_dog)) # &amp;lt;class &amp;#39;__main__.Dog&amp;#39;&amp;gt; print(isinstance(my_dog, Dog)) # True class 关键字用于定义一个类。类名通常使用 PascalCase 命名规范。pass 表示空语句块，用来占位。&#xA;构造函数 __init__ __init__ 是一个特殊方法（魔法方法），在创建对象时自动调用，用于初始化实例属性：&#xA;class Dog: def __init__(self, name: str, age: int): self.name = name # 实例属性 self.age = age # 实例属性 def bark(self) -&amp;gt; str: return f&amp;#34;{self.name} says: Woof!</description>
    </item>
  </channel>
</rss>
