<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom">
  <channel>
    <title>装饰器 on 老张开工了</title>
    <link>/%E8%A3%85%E9%A5%B0%E5%99%A8/</link>
    <description>Recent content in 装饰器 on 老张开工了</description>
    <generator>Hugo</generator>
    <language>zh-cn</language>
    <lastBuildDate>Thu, 21 May 2026 00:00:00 +0000</lastBuildDate>
    <atom:link href="/%E8%A3%85%E9%A5%B0%E5%99%A8/index.xml" rel="self" type="application/rss+xml" />
    <item>
      <title>装饰器深入与实践</title>
      <link>/posts/2026/05/decorators/</link>
      <pubDate>Thu, 21 May 2026 00:00:00 +0000</pubDate>
      <guid>/posts/2026/05/decorators/</guid>
      <description>认识装饰器 装饰器（Decorator）是 Python 中一种强大的元编程工具。简单来说，装饰器就是一个函数，它接受另一个函数作为参数，并返回一个新的函数。装饰器允许我们在不修改原函数源代码的情况下，给函数添加额外的功能。&#xA;函数是一等公民 要理解装饰器，先要理解 Python 中&amp;quot;函数是一等公民&amp;quot;这个概念：&#xA;# 函数可以赋值给变量 def greet(name): return f&amp;#34;你好, {name}!&amp;#34; say_hello = greet print(say_hello(&amp;#34;小明&amp;#34;)) # 输出: 你好, 小明! # 函数可以作为参数传递 def call_twice(func, arg): return func(arg), func(arg) result1, result2 = call_twice(greet, &amp;#34;小红&amp;#34;) print(result1) # 输出: 你好, 小红! # 函数可以嵌套定义 def outer(): def inner(): return &amp;#34;我是内部函数&amp;#34; return inner inner_func = outer() print(inner_func()) # 输出: 我是内部函数 最简单的装饰器 基于上述特性，我们可以写出最简单的装饰器：&#xA;def my_decorator(func): def wrapper(): print(&amp;#34;函数调用前执行&amp;#34;) func() print(&amp;#34;函数调用后执行&amp;#34;) return wrapper def say_hello(): print(&amp;#34;你好!</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>
  </channel>
</rss>
