<?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>/%E5%B1%9E%E6%80%A7/</link>
    <description>Recent content in 属性 on 老张开工了</description>
    <generator>Hugo</generator>
    <language>zh-cn</language>
    <lastBuildDate>Mon, 18 May 2026 00:00:00 +0000</lastBuildDate>
    <atom:link href="/%E5%B1%9E%E6%80%A7/index.xml" rel="self" type="application/rss+xml" />
    <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>
