{"id":1432,"date":"2026-01-20T13:45:54","date_gmt":"2026-01-20T05:45:54","guid":{"rendered":"http:\/\/www.preluna.xyz\/?p=1432"},"modified":"2026-01-25T01:18:55","modified_gmt":"2026-01-24T17:18:55","slug":"1432","status":"publish","type":"post","link":"http:\/\/www.preluna.xyz\/index.php\/2026\/01\/20\/1432\/preluna\/technology\/career-skills\/technology-horizon\/","title":{"rendered":"\u7b2c\u56db\u5341\u4e09\u8bfe\uff1a\u62bd\u8c61\u7c7b\u4e0e\u63a5\u53e3\u7684\u5177\u4f53\u533a\u522b"},"content":{"rendered":"\n<h2 class=\"wp-block-heading\">\u7b2c\u56db\u5341\u4e09\u8bfe\uff1a\u62bd\u8c61\u7c7b\u4e0e\u63a5\u53e3\u7684\u5177\u4f53\u533a\u522b<\/h2>\n\n\n\n<h2 class=\"wp-block-heading\">\u524d\u8a00\uff1a\u62bd\u8c61\u4e0e\u5951\u7ea6\u7684\u5fae\u5999\u5dee\u5f02<\/h2>\n\n\n\n<p>\u5728\u9762\u5411\u5bf9\u8c61\u7f16\u7a0b\u4e2d\uff0c\u62bd\u8c61\u7c7b\u548c\u63a5\u53e3\u90fd\u662f\u5b9e\u73b0\u62bd\u8c61\u548c\u591a\u6001\u7684\u91cd\u8981\u5de5\u5177\u3002\u5b83\u4eec\u6709\u76f8\u4f3c\u4e4b\u5904\uff0c\u4f46\u53c8\u6709\u672c\u8d28\u533a\u522b\u3002\u5f88\u591a\u521d\u5b66\u8005\u5bb9\u6613\u6df7\u6dc6\u4e24\u8005\uff0c\u4eca\u5929\u6211\u4eec\u5c31\u6765\u8be6\u7ec6\u89e3\u6790\u5b83\u4eec\u7684\u533a\u522b\u548c\u9002\u7528\u573a\u666f\u3002<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">\u7b2c\u4e00\u90e8\u5206\uff1a\u62bd\u8c61\u7c7b\u4e0e\u63a5\u53e3\u7684\u6838\u5fc3\u533a\u522b<\/h2>\n\n\n\n<figure class=\"wp-block-table\"><table class=\"has-fixed-layout\"><thead><tr><th>\u7279\u6027<\/th><th>\u62bd\u8c61\u7c7b (Abstract Class)<\/th><th>\u63a5\u53e3 (Interface)<\/th><\/tr><\/thead><tbody><tr><td><strong>\u5b9a\u4e49<\/strong><\/td><td>\u7528 <code>abstract<\/code> \u5173\u952e\u5b57\u5b9a\u4e49\u7684\u7c7b<\/td><td>\u7528 <code>interface<\/code> \u5173\u952e\u5b57\u5b9a\u4e49\u7684\u63a5\u53e3\uff08Python\u4e2d\u7528ABC\u6216Protocol\uff09<\/td><\/tr><tr><td><strong>\u65b9\u6cd5<\/strong><\/td><td>\u53ef\u4ee5\u5305\u542b\u62bd\u8c61\u65b9\u6cd5\u548c\u5177\u4f53\u65b9\u6cd5<\/td><td>\u901a\u5e38\u53ea\u5305\u542b\u62bd\u8c61\u65b9\u6cd5\uff08\u67d0\u4e9b\u8bed\u8a00\u652f\u6301\u9ed8\u8ba4\u5b9e\u73b0\uff09<\/td><\/tr><tr><td><strong>\u5b57\u6bb5<\/strong><\/td><td>\u53ef\u4ee5\u5305\u542b\u5b9e\u4f8b\u5b57\u6bb5\u548c\u9759\u6001\u5b57\u6bb5<\/td><td>\u53ea\u80fd\u5305\u542b\u9759\u6001\u5e38\u91cf\uff08Java\uff09\u6216\u4e0d\u5305\u542b\u5b57\u6bb5\uff08Python\uff09<\/td><\/tr><tr><td><strong>\u6784\u9020\u5668<\/strong><\/td><td>\u53ef\u4ee5\u6709\u6784\u9020\u5668\uff08\u4f46\u4e0d\u80fd\u5b9e\u4f8b\u5316\uff09<\/td><td>\u4e0d\u80fd\u6709\u6784\u9020\u5668<\/td><\/tr><tr><td><strong>\u7ee7\u627f<\/strong><\/td><td>\u7c7b\u53ea\u80fd\u5355\u7ee7\u627f\u62bd\u8c61\u7c7b<\/td><td>\u7c7b\u53ef\u4ee5\u5b9e\u73b0\u591a\u4e2a\u63a5\u53e3<\/td><\/tr><tr><td><strong>\u8bbe\u8ba1\u76ee\u7684<\/strong><\/td><td>\u8868\u793a&#8221;\u662f\u4e00\u4e2a\uff08is-a\uff09&#8221;\u5173\u7cfb\uff0c\u4ee3\u7801\u590d\u7528<\/td><td>\u8868\u793a&#8221;\u5177\u6709\u67d0\u79cd\u80fd\u529b\uff08can-do\uff09&#8221;\u5173\u7cfb\uff0c\u5b9a\u4e49\u5951\u7ea6<\/td><\/tr><tr><td><strong>\u4f7f\u7528\u573a\u666f<\/strong><\/td><td>\u4e3a\u76f8\u5173\u7c7b\u63d0\u4f9b\u516c\u5171\u57fa\u7c7b\uff0c\u90e8\u5206\u5b9e\u73b0<\/td><td>\u5b9a\u4e49\u884c\u4e3a\u5951\u7ea6\uff0c\u5b9e\u73b0\u591a\u6001<\/td><\/tr><\/tbody><\/table><\/figure>\n\n\n\n<p><strong>\u6838\u5fc3\u533a\u522b\u7406\u89e3\uff1a<\/strong><\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li><strong>\u62bd\u8c61\u7c7b<\/strong>\uff1a\u662f&#8221;\u4e0d\u5b8c\u6574\u7684\u7c7b&#8221;\uff0c\u5305\u542b\u5177\u4f53\u5b9e\u73b0\uff0c\u7528\u4e8e\u4ee3\u7801\u590d\u7528\u548c\u5efa\u7acb&#8221;\u662f\u4ec0\u4e48&#8221;\u7684\u5173\u7cfb<\/li>\n\n\n\n<li><strong>\u63a5\u53e3<\/strong>\uff1a\u662f&#8221;\u7eaf\u7cb9\u7684\u5951\u7ea6&#8221;\uff0c\u53ea\u5b9a\u4e49\u884c\u4e3a\u89c4\u8303\uff0c\u7528\u4e8e\u5efa\u7acb&#8221;\u80fd\u505a\u4ec0\u4e48&#8221;\u7684\u5173\u7cfb<\/li>\n<\/ul>\n\n\n\n<h2 class=\"wp-block-heading\">\u7b2c\u4e8c\u90e8\u5206\uff1a\u5404\u8bed\u8a00\u4e2d\u7684\u62bd\u8c61\u7c7b\u4e0e\u63a5\u53e3\u5b9e\u73b0<\/h2>\n\n\n\n<h3 class=\"wp-block-heading\">Python\uff1a\u62bd\u8c61\u57fa\u7c7b vs \u534f\u8bae<\/h3>\n\n\n\n<p>Python\u6ca1\u6709\u4f20\u7edf\u610f\u4e49\u4e0a\u7684&#8221;\u63a5\u53e3&#8221;\u5173\u952e\u5b57\uff0c\u4f46\u901a\u8fc7\u4e24\u79cd\u65b9\u5f0f\u5b9e\u73b0\u7c7b\u4f3c\u529f\u80fd\uff1a<\/p>\n\n\n\n<h4 class=\"wp-block-heading\">\u62bd\u8c61\u7c7b\u5b9e\u73b0\uff08\u4f7f\u7528ABC\uff09<\/h4>\n\n\n\n<pre class=\"wp-block-code\"><code>from abc import ABC, abstractmethod\nfrom typing import Protocol\n\n# \u62bd\u8c61\u7c7b\u793a\u4f8b\nclass Animal(ABC):\n    \"\"\"\u62bd\u8c61\u7c7b\uff1a\u52a8\u7269\u57fa\u7c7b\"\"\"\n\n    def __init__(self, name: str, age: int = 0):\n        self.name = name  # \u53ef\u4ee5\u5305\u542b\u5b9e\u4f8b\u5b57\u6bb5\n        self.age = age\n\n    @abstractmethod\n    def make_sound(self) -&gt; str:\n        \"\"\"\u62bd\u8c61\u65b9\u6cd5\uff1a\u52a8\u7269\u53eb\"\"\"\n        pass\n\n    def eat(self) -&gt; str:\n        \"\"\"\u5177\u4f53\u65b9\u6cd5\uff1a\u52a8\u7269\u5403\uff08\u5df2\u5b9e\u73b0\uff09\"\"\"\n        return f\"{self.name}\u6b63\u5728\u5403\u4e1c\u897f\"\n\n    def sleep(self) -&gt; str:\n        \"\"\"\u5177\u4f53\u65b9\u6cd5\uff1a\u52a8\u7269\u7761\uff08\u5df2\u5b9e\u73b0\uff09\"\"\"\n        return f\"{self.name}\u6b63\u5728\u7761\u89c9\"\n\n# \u5177\u4f53\u7c7b\u7ee7\u627f\u62bd\u8c61\u7c7b\nclass Dog(Animal):\n    \"\"\"\u72d7\uff1a\u7ee7\u627f\u62bd\u8c61\u7c7b\uff0c\u5fc5\u987b\u5b9e\u73b0\u62bd\u8c61\u65b9\u6cd5\"\"\"\n\n    def make_sound(self) -&gt; str:\n        return f\"{self.name}\u6c6a\u6c6a\u53eb\"<\/code><\/pre>\n\n\n\n<h4 class=\"wp-block-heading\">\u63a5\u53e3\u5b9e\u73b0\uff08\u4f7f\u7528Protocol\uff09<\/h4>\n\n\n\n<pre class=\"wp-block-code\"><code># \u63a5\u53e3\u793a\u4f8b\uff08\u4f7f\u7528Protocol\uff09\nclass Flyable(Protocol):\n    \"\"\"\u63a5\u53e3\uff1a\u53ef\u98de\u884c\u80fd\u529b\uff08\u53ea\u5b9a\u4e49\u5951\u7ea6\uff09\"\"\"\n\n    def fly(self) -&gt; str:\n        \"\"\"\u98de\u884c\u65b9\u6cd5\"\"\"\n        ...\n\nclass Swimmable(Protocol):\n    \"\"\"\u63a5\u53e3\uff1a\u53ef\u6e38\u6cf3\u80fd\u529b\"\"\"\n\n    def swim(self) -&gt; str:\n        \"\"\"\u6e38\u6cf3\u65b9\u6cd5\"\"\"\n        ...\n\n# \u5177\u4f53\u7c7b\u5b9e\u73b0\u591a\u4e2a\u63a5\u53e3\nclass Duck(Animal, Flyable, Swimmable):\n    \"\"\"\u9e2d\u5b50\uff1a\u7ee7\u627f\u62bd\u8c61\u7c7b\u5e76\u5b9e\u73b0\u591a\u4e2a\u63a5\u53e3\"\"\"\n\n    def make_sound(self) -&gt; str:\n        return f\"{self.name}\u560e\u560e\u53eb\"\n\n    def fly(self) -&gt; str:\n        return f\"{self.name}\u5728\u4f4e\u7a7a\u98de\u884c\"\n\n    def swim(self) -&gt; str:\n        return f\"{self.name}\u5728\u6c34\u9762\u6e38\u6cf3\"<\/code><\/pre>\n\n\n\n<p><strong>Python\u7279\u70b9\u603b\u7ed3\uff1a<\/strong><\/p>\n\n\n\n<ol class=\"wp-block-list\">\n<li><strong>\u62bd\u8c61\u7c7b<\/strong>\uff1a\u4f7f\u7528<code>ABC<\/code>\uff0c\u53ef\u4ee5\u5305\u542b\u62bd\u8c61\u65b9\u6cd5\u548c\u5177\u4f53\u65b9\u6cd5\uff0c\u6709\u6784\u9020\u5668<\/li>\n\n\n\n<li><strong>\u63a5\u53e3<\/strong>\uff1a\u4f7f\u7528<code>Protocol<\/code>\uff0c\u53ea\u5b9a\u4e49\u65b9\u6cd5\u7b7e\u540d\uff0c\u6ca1\u6709\u5b9e\u73b0<\/li>\n\n\n\n<li><strong>\u591a\u91cd\u7ee7\u627f<\/strong>\uff1a\u4e00\u4e2a\u7c7b\u53ef\u4ee5\u7ee7\u627f\u4e00\u4e2a\u62bd\u8c61\u7c7b\uff0c\u540c\u65f6\u5b9e\u73b0\u591a\u4e2a\u534f\u8bae<\/li>\n\n\n\n<li><strong>\u8bbe\u8ba1\u54f2\u5b66<\/strong>\uff1a\u62bd\u8c61\u7c7b\u7528\u4e8e\u4ee3\u7801\u590d\u7528\uff0c\u63a5\u53e3\u7528\u4e8e\u5b9a\u4e49\u884c\u4e3a\u5951\u7ea6<\/li>\n<\/ol>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h3 class=\"wp-block-heading\">Java\uff1a\u4e25\u683c\u7684\u62bd\u8c61\u7c7b\u548c\u63a5\u53e3\u7cfb\u7edf<\/h3>\n\n\n\n<p>Java\u6709\u6700\u4e25\u683c\u7684\u62bd\u8c61\u7c7b\u548c\u63a5\u53e3\u4f53\u7cfb\uff0c\u4e24\u8005\u6709\u660e\u663e\u533a\u5206\uff1a<\/p>\n\n\n\n<h4 class=\"wp-block-heading\">\u62bd\u8c61\u7c7b\u793a\u4f8b<\/h4>\n\n\n\n<pre class=\"wp-block-code\"><code>\/\/ Java\u62bd\u8c61\u7c7b\u793a\u4f8b\npublic abstract class Animal {\n    \/\/ \u53ef\u4ee5\u5305\u542b\u5b57\u6bb5\n    protected String name;\n    protected int age;\n\n    \/\/ \u53ef\u4ee5\u6709\u6784\u9020\u5668\n    public Animal(String name) {\n        this.name = name;\n        this.age = 0;\n    }\n\n    \/\/ \u62bd\u8c61\u65b9\u6cd5\uff08\u5fc5\u987b\u7531\u5b50\u7c7b\u5b9e\u73b0\uff09\n    public abstract String makeSound();\n\n    \/\/ \u5177\u4f53\u65b9\u6cd5\uff08\u5df2\u6709\u5b9e\u73b0\uff09\n    public String eat() {\n        return name + \"\u6b63\u5728\u5403\u4e1c\u897f\";\n    }\n}<\/code><\/pre>\n\n\n\n<h4 class=\"wp-block-heading\">\u63a5\u53e3\u793a\u4f8b<\/h4>\n\n\n\n<pre class=\"wp-block-code\"><code>\/\/ Java\u63a5\u53e3\u793a\u4f8b\npublic interface Flyable {\n    \/\/ \u63a5\u53e3\u4e2d\u53ea\u80fd\u5b9a\u4e49\u62bd\u8c61\u65b9\u6cd5\uff08Java 8\u4ee5\u524d\uff09\n    String fly();\n\n    \/\/ Java 8+ \u53ef\u4ee5\u6709\u9ed8\u8ba4\u65b9\u6cd5\n    default String glide() {\n        return \"\u6ed1\u7fd4\u4e2d\";\n    }\n\n    \/\/ Java 8+ \u53ef\u4ee5\u6709\u9759\u6001\u65b9\u6cd5\n    static int getMaxSpeed() {\n        return 100;\n    }\n\n    \/\/ \u53ea\u80fd\u5305\u542b\u5e38\u91cf\uff08\u9ed8\u8ba4 public static final\uff09\n    int MAX_ALTITUDE = 10000;\n}\n\n\/\/ \u7ee7\u627f\u62bd\u8c61\u7c7b\u5e76\u5b9e\u73b0\u63a5\u53e3\npublic class Bird extends Animal implements Flyable {\n    public Bird(String name) {\n        super(name);\n    }\n\n    @Override\n    public String makeSound() {\n        return name + \"\u53fd\u53fd\u55b3\u55b3\";\n    }\n\n    @Override\n    public String fly() {\n        return name + \"\u5728\u5929\u7a7a\u98de\u7fd4\";\n    }\n}<\/code><\/pre>\n\n\n\n<p><strong>Java\u7279\u70b9\u603b\u7ed3\uff1a<\/strong><\/p>\n\n\n\n<ol class=\"wp-block-list\">\n<li><strong>\u7ee7\u627f\u9650\u5236<\/strong>\uff1a\u7c7b\u53ea\u80fd\u5355\u7ee7\u627f\u62bd\u8c61\u7c7b\uff0c\u4f46\u53ef\u4ee5\u5b9e\u73b0\u591a\u4e2a\u63a5\u53e3<\/li>\n\n\n\n<li><strong>\u5b57\u6bb5\u533a\u522b<\/strong>\uff1a\u62bd\u8c61\u7c7b\u53ef\u4ee5\u6709\u5b9e\u4f8b\u5b57\u6bb5\uff0c\u63a5\u53e3\u53ea\u80fd\u6709\u9759\u6001\u5e38\u91cf<\/li>\n\n\n\n<li><strong>\u7248\u672c\u6f14\u8fdb<\/strong>\uff1aJava 8\u524d\u63a5\u53e3\u53ea\u80fd\u6709\u62bd\u8c61\u65b9\u6cd5\uff0cJava 8+\u53ef\u4ee5\u6709\u9ed8\u8ba4\u65b9\u6cd5\u548c\u9759\u6001\u65b9\u6cd5<\/li>\n\n\n\n<li><strong>\u8bbe\u8ba1\u54f2\u5b66<\/strong>\uff1a\u62bd\u8c61\u7c7b\u8868\u793a&#8221;\u662f\u4ec0\u4e48&#8221;\uff0c\u63a5\u53e3\u8868\u793a&#8221;\u80fd\u505a\u4ec0\u4e48&#8221;<\/li>\n<\/ol>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h3 class=\"wp-block-heading\">C#\uff1a\u529f\u80fd\u4e30\u5bcc\u7684\u62bd\u8c61\u7c7b\u548c\u63a5\u53e3<\/h3>\n\n\n\n<p>C#\u7684\u62bd\u8c61\u7c7b\u548c\u63a5\u53e3\u4f53\u7cfb\u4e5f\u5f88\u5b8c\u5584\uff0c\u63d0\u4f9b\u4e86\u66f4\u4e30\u5bcc\u7684\u7279\u6027\uff1a<\/p>\n\n\n\n<h4 class=\"wp-block-heading\">\u62bd\u8c61\u7c7b\u793a\u4f8b<\/h4>\n\n\n\n<pre class=\"wp-block-code\"><code>\/\/ C#\u62bd\u8c61\u7c7b\u793a\u4f8b\npublic abstract class Animal\n{\n    \/\/ \u53ef\u4ee5\u5305\u542b\u5b57\u6bb5\n    protected string name;\n    protected int age;\n\n    \/\/ \u53ef\u4ee5\u6709\u6784\u9020\u5668\n    protected Animal(string name)\n    {\n        this.name = name;\n        this.age = 0;\n    }\n\n    \/\/ \u62bd\u8c61\u65b9\u6cd5\n    public abstract string MakeSound();\n\n    \/\/ \u865a\u65b9\u6cd5\uff08\u53ef\u4ee5\u88ab\u5b50\u7c7b\u91cd\u5199\uff09\n    public virtual string Eat()\n    {\n        return name + \"\u6b63\u5728\u5403\u4e1c\u897f\";\n    }\n\n    \/\/ \u5c5e\u6027\n    public string Name =&gt; name;\n    public int Age { get; set; }\n}<\/code><\/pre>\n\n\n\n<h4 class=\"wp-block-heading\">\u63a5\u53e3\u793a\u4f8b<\/h4>\n\n\n\n<pre class=\"wp-block-code\"><code>\/\/ C#\u63a5\u53e3\u793a\u4f8b\uff08\u7ea6\u5b9a\u4ee5I\u5f00\u5934\uff09\npublic interface IFlyable\n{\n    \/\/ \u63a5\u53e3\u6210\u5458\u9ed8\u8ba4\u662fpublic\u548cabstract\n    string Fly();\n\n    \/\/ C# 8.0+ \u53ef\u4ee5\u6709\u9ed8\u8ba4\u5b9e\u73b0\n    string Glide()\n    {\n        return \"\u6ed1\u7fd4\u4e2d\";\n    }\n\n    \/\/ C# 8.0+ \u53ef\u4ee5\u6709\u9759\u6001\u65b9\u6cd5\n    static int GetMaxSpeed()\n    {\n        return 100;\n    }\n\n    \/\/ \u5c5e\u6027\u4e5f\u53ef\u4ee5\u5728\u63a5\u53e3\u4e2d\u5b9a\u4e49\n    int MaxAltitude { get; }\n}<\/code><\/pre>\n\n\n\n<p><strong>C#\u7279\u70b9\u603b\u7ed3\uff1a<\/strong><\/p>\n\n\n\n<ol class=\"wp-block-list\">\n<li><strong>\u547d\u540d\u7ea6\u5b9a<\/strong>\uff1a\u63a5\u53e3\u901a\u5e38\u4ee5&#8217;I&#8217;\u5f00\u5934\uff08\u5982<code>IFlyable<\/code>\uff09<\/li>\n\n\n\n<li><strong>\u663e\u5f0f\u5b9e\u73b0<\/strong>\uff1a\u53ef\u4ee5\u663e\u5f0f\u5b9e\u73b0\u63a5\u53e3\u4ee5\u907f\u514d\u547d\u540d\u51b2\u7a81<\/li>\n\n\n\n<li><strong>\u7248\u672c\u6f14\u8fdb<\/strong>\uff1aC# 8.0\u524d\u53ea\u80fd\u6709\u62bd\u8c61\u6210\u5458\uff0cC# 8.0+\u53ef\u4ee5\u6709\u9ed8\u8ba4\u5b9e\u73b0\u548c\u9759\u6001\u65b9\u6cd5<\/li>\n\n\n\n<li><strong>\u5c5e\u6027\u652f\u6301<\/strong>\uff1a\u62bd\u8c61\u7c7b\u548c\u63a5\u53e3\u90fd\u53ef\u4ee5\u5b9a\u4e49\u5c5e\u6027<\/li>\n<\/ol>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h3 class=\"wp-block-heading\">Go\uff1a\u6ca1\u6709\u4f20\u7edf\u62bd\u8c61\u7c7b\uff0c\u53ea\u6709\u63a5\u53e3<\/h3>\n\n\n\n<p>Go\u8bed\u8a00\u7684\u8bbe\u8ba1\u54f2\u5b66\u4e0d\u540c\uff0c\u5b83\u6ca1\u6709\u7c7b\u7684\u6982\u5ff5\uff0c\u53ea\u6709\u7ed3\u6784\u4f53\u548c\u63a5\u53e3\uff1a<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>\/\/ Go\u6ca1\u6709\u62bd\u8c61\u7c7b\uff0c\u53ea\u6709\u63a5\u53e3\n\n\/\/ \u63a5\u53e3\u5b9a\u4e49\ntype Animal interface {\n    MakeSound() string\n    Eat() string\n}\n\n\/\/ \u53e6\u4e00\u4e2a\u63a5\u53e3\ntype Flyable interface {\n    Fly() string\n}\n\n\/\/ \u7ed3\u6784\u4f53\uff08\u76f8\u5f53\u4e8e\u7c7b\uff09\ntype Dog struct {\n    Name string\n    Age  int\n}\n\n\/\/ \u5b9e\u73b0Animal\u63a5\u53e3\u7684\u65b9\u6cd5\uff08\u9690\u5f0f\u5b9e\u73b0\uff09\nfunc (d Dog) MakeSound() string {\n    return d.Name + \"\u6c6a\u6c6a\u53eb\"\n}\n\nfunc (d Dog) Eat() string {\n    return d.Name + \"\u6b63\u5728\u5403\u9aa8\u5934\"\n}\n\n\/\/ \u53e6\u4e00\u4e2a\u7ed3\u6784\u4f53\u5b9e\u73b0\u591a\u4e2a\u63a5\u53e3\ntype Bird struct {\n    Name string\n    Age  int\n}\n\nfunc (b Bird) MakeSound() string {\n    return b.Name + \"\u53fd\u53fd\u55b3\u55b3\"\n}\n\nfunc (b Bird) Eat() string {\n    return b.Name + \"\u6b63\u5728\u5403\u866b\u5b50\"\n}\n\nfunc (b Bird) Fly() string {\n    return b.Name + \"\u5728\u5929\u7a7a\u98de\u7fd4\"\n}<\/code><\/pre>\n\n\n\n<p><strong>Go\u7279\u70b9\u603b\u7ed3\uff1a<\/strong><\/p>\n\n\n\n<ol class=\"wp-block-list\">\n<li><strong>\u6ca1\u6709\u62bd\u8c61\u7c7b<\/strong>\uff1aGo\u6ca1\u6709\u7c7b\u7684\u6982\u5ff5\uff0c\u53ea\u6709\u7ed3\u6784\u4f53<\/li>\n\n\n\n<li><strong>\u9690\u5f0f\u63a5\u53e3<\/strong>\uff1a\u4e0d\u9700\u8981\u660e\u786e\u58f0\u660e\u5b9e\u73b0\u63a5\u53e3\uff0c\u6709\u5bf9\u5e94\u65b9\u6cd5\u5c31\u662f\u5b9e\u73b0\u4e86<\/li>\n\n\n\n<li><strong>\u975e\u4fb5\u5165\u5f0f<\/strong>\uff1a\u63a5\u53e3\u5b9a\u4e49\u4e0e\u5b9e\u73b0\u5b8c\u5168\u5206\u79bb<\/li>\n\n\n\n<li><strong>\u7ec4\u5408\u63a5\u53e3<\/strong>\uff1a\u53ef\u4ee5\u7ec4\u5408\u591a\u4e2a\u63a5\u53e3\u5f62\u6210\u65b0\u63a5\u53e3<\/li>\n\n\n\n<li><strong>\u7a7a\u63a5\u53e3<\/strong>\uff1a<code>interface{}<\/code>\u53ef\u4ee5\u8868\u793a\u4efb\u4f55\u7c7b\u578b\uff08\u76f8\u5f53\u4e8eAny\u7c7b\u578b\uff09<\/li>\n<\/ol>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h3 class=\"wp-block-heading\">TypeScript\uff1a\u7f16\u8bd1\u65f6\u7684\u62bd\u8c61\u7c7b\u548c\u63a5\u53e3<\/h3>\n\n\n\n<p>TypeScript\u4f5c\u4e3aJavaScript\u7684\u8d85\u96c6\uff0c\u63d0\u4f9b\u4e86\u7f16\u8bd1\u65f6\u7684\u7c7b\u578b\u68c0\u67e5\u548c\u62bd\u8c61\u673a\u5236\uff1a<\/p>\n\n\n\n<h4 class=\"wp-block-heading\">\u62bd\u8c61\u7c7b\u793a\u4f8b<\/h4>\n\n\n\n<pre class=\"wp-block-code\"><code>\/\/ TypeScript\u62bd\u8c61\u7c7b\u793a\u4f8b\nabstract class Animal {\n    \/\/ \u53ef\u4ee5\u5305\u542b\u5c5e\u6027\n    protected name: string;\n    protected age: number;\n\n    \/\/ \u53ef\u4ee5\u6709\u6784\u9020\u5668\n    constructor(name: string) {\n        this.name = name;\n        this.age = 0;\n    }\n\n    \/\/ \u62bd\u8c61\u65b9\u6cd5\n    abstract makeSound(): string;\n\n    \/\/ \u5177\u4f53\u65b9\u6cd5\n    eat(): string {\n        return `${this.name}\u6b63\u5728\u5403\u4e1c\u897f`;\n    }\n}<\/code><\/pre>\n\n\n\n<h4 class=\"wp-block-heading\">\u63a5\u53e3\u793a\u4f8b<\/h4>\n\n\n\n<pre class=\"wp-block-code\"><code>\/\/ TypeScript\u63a5\u53e3\u793a\u4f8b\ninterface Flyable {\n    \/\/ \u65b9\u6cd5\n    fly(): string;\n\n    \/\/ \u53ef\u9009\u5c5e\u6027\n    wings?: number;\n\n    \/\/ \u53ea\u8bfb\u5c5e\u6027\n    readonly maxAltitude: number;\n\n    \/\/ \u7d22\u5f15\u7b7e\u540d\n    &#91;key: string]: any;\n}\n\n\/\/ \u4f7f\u7528\u4ea4\u53c9\u7c7b\u578b\u7ec4\u5408\u591a\u4e2a\u63a5\u53e3\ninterface Swimmable {\n    swim(): string;\n    depth?: number;\n}\n\n\/\/ \u7ee7\u627f\u62bd\u8c61\u7c7b\u5e76\u5b9e\u73b0\u63a5\u53e3\nclass Bird extends Animal implements Flyable, Swimmable {\n    readonly maxAltitude: number = 1000;\n    wings?: number;\n    depth?: number;\n\n    constructor(name: string, wings: number = 2) {\n        super(name);\n        this.wings = wings;\n    }\n\n    makeSound(): string {\n        return `${this.name}\u53fd\u53fd\u55b3\u55b3`;\n    }\n\n    fly(): string {\n        return `${this.name}\u7528${this.wings}\u53ea\u7fc5\u8180\u5728\u98de\u7fd4`;\n    }\n\n    swim(): string {\n        return `${this.name}\u5728\u6c34\u9762\u6e38\u6cf3`;\n    }\n}<\/code><\/pre>\n\n\n\n<p><strong>TypeScript\u7279\u70b9\u603b\u7ed3\uff1a<\/strong><\/p>\n\n\n\n<ol class=\"wp-block-list\">\n<li><strong>\u7f16\u8bd1\u65f6\u7279\u6027<\/strong>\uff1a\u62bd\u8c61\u7c7b\u548c\u63a5\u53e3\u90fd\u53ea\u5728\u7f16\u8bd1\u65f6\u8d77\u4f5c\u7528\uff0c\u8fd0\u884c\u65f6\u65e0\u5f71\u54cd<\/li>\n\n\n\n<li><strong>\u7075\u6d3b\u7ec4\u5408<\/strong>\uff1a\u53ef\u4ee5\u4f7f\u7528\u4ea4\u53c9\u7c7b\u578b\uff08<code>&amp;<\/code>\uff09\u7ec4\u5408\u591a\u4e2a\u63a5\u53e3<\/li>\n\n\n\n<li><strong>\u4e30\u5bcc\u7279\u6027<\/strong>\uff1a\u63a5\u53e3\u652f\u6301\u53ef\u9009\u5c5e\u6027\u3001\u53ea\u8bfb\u5c5e\u6027\u3001\u7d22\u5f15\u7b7e\u540d\u7b49<\/li>\n\n\n\n<li><strong>\u7ed3\u6784\u7c7b\u578b<\/strong>\uff1aTypeScript\u57fa\u4e8e\u7ed3\u6784\u7c7b\u578b\uff08\u9e2d\u5b50\u7c7b\u578b\uff09\uff0c\u5173\u6ce8\u5f62\u72b6\u800c\u975e\u540d\u4e49<\/li>\n<\/ol>\n\n\n\n<h2 class=\"wp-block-heading\">\u7b2c\u4e09\u90e8\u5206\uff1a\u8bbe\u8ba1\u539f\u5219\u4e0e\u6700\u4f73\u5b9e\u8df5<\/h2>\n\n\n\n<h3 class=\"wp-block-heading\">\u4f55\u65f6\u4f7f\u7528\u62bd\u8c61\u7c7b\uff1f<\/h3>\n\n\n\n<ol class=\"wp-block-list\">\n<li><strong>\u4ee3\u7801\u590d\u7528<\/strong>\uff1a\u591a\u4e2a\u76f8\u5173\u7c7b\u5171\u4eab\u76f8\u540c\u5b9e\u73b0\u65f6<\/li>\n\n\n\n<li><strong>\u7d27\u5bc6\u5173\u7cfb<\/strong>\uff1a\u5b50\u7c7b\u4e0e\u7236\u7c7b\u662f&#8221;is-a&#8221;\u5173\u7cfb\u65f6<\/li>\n\n\n\n<li><strong>\u72b6\u6001\u5171\u4eab<\/strong>\uff1a\u9700\u8981\u5728\u57fa\u7c7b\u4e2d\u7ef4\u62a4\u72b6\u6001\u65f6<\/li>\n\n\n\n<li><strong>\u7248\u672c\u63a7\u5236<\/strong>\uff1a\u9700\u8981\u5411\u540e\u517c\u5bb9\u5730\u6dfb\u52a0\u65b0\u65b9\u6cd5\u65f6<\/li>\n<\/ol>\n\n\n\n<h3 class=\"wp-block-heading\">\u4f55\u65f6\u4f7f\u7528\u63a5\u53e3\uff1f<\/h3>\n\n\n\n<ol class=\"wp-block-list\">\n<li><strong>\u5b9a\u4e49\u5951\u7ea6<\/strong>\uff1a\u53ea\u5173\u5fc3\u884c\u4e3a\u89c4\u8303\uff0c\u4e0d\u5173\u5fc3\u5b9e\u73b0\u65f6<\/li>\n\n\n\n<li><strong>\u591a\u91cd\u7ee7\u627f<\/strong>\uff1a\u4e00\u4e2a\u7c7b\u9700\u8981\u591a\u79cd\u80fd\u529b\u65f6<\/li>\n\n\n\n<li><strong>\u89e3\u8026\u8bbe\u8ba1<\/strong>\uff1a\u5e0c\u671b\u5b9e\u73b0\u4e0e\u63a5\u53e3\u677e\u8026\u5408\u65f6<\/li>\n\n\n\n<li><strong>API\u8bbe\u8ba1<\/strong>\uff1a\u4e3a\u5176\u4ed6\u5f00\u53d1\u8005\u63d0\u4f9b\u8c03\u7528\u89c4\u8303\u65f6<\/li>\n<\/ol>\n\n\n\n<h3 class=\"wp-block-heading\">SOLID\u539f\u5219\u4e2d\u7684\u5e94\u7528<\/h3>\n\n\n\n<ul class=\"wp-block-list\">\n<li><strong>\u5355\u4e00\u804c\u8d23\u539f\u5219<\/strong>\uff1a\u63a5\u53e3\u5e94\u8be5\u5c0f\u800c\u4e13\u4e00<\/li>\n\n\n\n<li><strong>\u63a5\u53e3\u9694\u79bb\u539f\u5219<\/strong>\uff1a\u4e0d\u8981\u5f3a\u8feb\u5ba2\u6237\u7aef\u4f9d\u8d56\u5b83\u4eec\u4e0d\u7528\u7684\u63a5\u53e3<\/li>\n\n\n\n<li><strong>\u4f9d\u8d56\u5012\u7f6e\u539f\u5219<\/strong>\uff1a\u4f9d\u8d56\u62bd\u8c61\uff08\u63a5\u53e3\/\u62bd\u8c61\u7c7b\uff09\uff0c\u4e0d\u4f9d\u8d56\u5177\u4f53\u5b9e\u73b0<\/li>\n<\/ul>\n\n\n\n<h2 class=\"wp-block-heading\">\u603b\u7ed3\uff1a\u62bd\u8c61\u7c7b\u4e0e\u63a5\u53e3\u7684\u9009\u62e9\u6307\u5357<\/h2>\n\n\n\n<figure class=\"wp-block-table\"><table class=\"has-fixed-layout\"><thead><tr><th>\u573a\u666f<\/th><th>\u63a8\u8350\u4f7f\u7528<\/th><th>\u539f\u56e0<\/th><\/tr><\/thead><tbody><tr><td>\u5b9a\u4e49\u5bf9\u8c61\u7c7b\u578b\u5c42\u6b21\u7ed3\u6784<\/td><td><strong>\u62bd\u8c61\u7c7b<\/strong><\/td><td>\u8868\u793a&#8221;\u662f\u4ec0\u4e48&#8221;\u7684\u5173\u7cfb<\/td><\/tr><tr><td>\u5b9a\u4e49\u5bf9\u8c61\u80fd\u529b\/\u884c\u4e3a<\/td><td><strong>\u63a5\u53e3<\/strong><\/td><td>\u8868\u793a&#8221;\u80fd\u505a\u4ec0\u4e48&#8221;\u7684\u5173\u7cfb<\/td><\/tr><tr><td>\u9700\u8981\u4ee3\u7801\u590d\u7528<\/td><td><strong>\u62bd\u8c61\u7c7b<\/strong><\/td><td>\u53ef\u4ee5\u63d0\u4f9b\u5177\u4f53\u5b9e\u73b0<\/td><\/tr><tr><td>\u9700\u8981\u591a\u91cd\u7ee7\u627f<\/td><td><strong>\u63a5\u53e3<\/strong><\/td><td>\u7c7b\u53ef\u4ee5\u5b9e\u73b0\u591a\u4e2a\u63a5\u53e3<\/td><\/tr><tr><td>\u5b9a\u4e49API\u5951\u7ea6<\/td><td><strong>\u63a5\u53e3<\/strong><\/td><td>\u66f4\u7075\u6d3b\uff0c\u4e0d\u4e0e\u7279\u5b9a\u5b9e\u73b0\u7ed1\u5b9a<\/td><\/tr><tr><td>\u6846\u67b6\u8bbe\u8ba1<\/td><td><strong>\u4e24\u8005\u7ed3\u5408<\/strong><\/td><td>\u62bd\u8c61\u7c7b\u63d0\u4f9b\u9aa8\u67b6\uff0c\u63a5\u53e3\u5b9a\u4e49\u6269\u5c55\u70b9<\/td><\/tr><\/tbody><\/table><\/figure>\n\n\n\n<p><strong>\u9ec4\u91d1\u6cd5\u5219\uff1a<\/strong><\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li><strong>\u9ed8\u8ba4\u4f7f\u7528\u63a5\u53e3<\/strong>\uff1a\u9664\u975e\u6709\u660e\u786e\u7684\u7406\u7531\u9700\u8981\u5171\u4eab\u4ee3\u7801\u6216\u72b6\u6001<\/li>\n\n\n\n<li><strong>\u63a5\u53e3\u4f18\u5148\u539f\u5219<\/strong>\uff1a\u5148\u5b9a\u4e49\u63a5\u53e3\uff0c\u518d\u8003\u8651\u662f\u5426\u9700\u8981\u62bd\u8c61\u7c7b<\/li>\n\n\n\n<li><strong>\u7ec4\u5408\u4f18\u4e8e\u7ee7\u627f<\/strong>\uff1a\u8003\u8651\u662f\u5426\u53ef\u4ee5\u901a\u8fc7\u7ec4\u5408\u63a5\u53e3\u6765\u5b9e\u73b0\uff0c\u800c\u4e0d\u662f\u7ee7\u627f\u62bd\u8c61\u7c7b<\/li>\n<\/ul>\n\n\n\n<pre class=\"wp-block-code\"><code>\u638c\u63e1\u62bd\u8c61\u7c7b\u548c\u63a5\u53e3\u7684\u533a\u522b\uff0c\u80fd\u591f\u5e2e\u52a9\u4f60\u5728\u9762\u5411\u5bf9\u8c61\u8bbe\u8ba1\u4e2d\u505a\u51fa\u66f4\u5408\u7406\u7684\u9009\u62e9\uff0c\u5199\u51fa\u66f4\u7075\u6d3b\u3001\u53ef\u7ef4\u62a4\u7684\u4ee3\u7801\u3002\n\n<\/code><\/pre>\n\n\n\n<h2 class=\"wp-block-heading\">\u62bd\u8c61\u7c7b\u4e0e\u63a5\u53e3\u7684\u9009\u62e9\u7b56\u7565<\/h2>\n\n\n\n<h2 class=\"wp-block-heading\">\u7b2c\u56db\u90e8\u5206\uff1a\u4f55\u65f6\u4f7f\u7528\u62bd\u8c61\u7c7b\u4e0e\u63a5\u53e3\uff08\u539f\u7b2c\u4e09\u90e8\u5206\uff09<\/h2>\n\n\n\n<h3 class=\"wp-block-heading\">\u4f55\u65f6\u4f7f\u7528\u62bd\u8c61\u7c7b\uff1f<\/h3>\n\n\n\n<p>\u62bd\u8c61\u7c7b\u9002\u7528\u4e8e\u4ee5\u4e0b\u56db\u79cd\u5178\u578b\u573a\u666f\uff1a<\/p>\n\n\n\n<h4 class=\"wp-block-heading\">1. \u4ee3\u7801\u590d\u7528\u548c\u5171\u4eab<\/h4>\n\n\n\n<p><strong>\u573a\u666f\u8bf4\u660e<\/strong>\uff1a\u5f53\u591a\u4e2a\u76f8\u5173\u7c7b\u6709\u5171\u540c\u7684\u4ee3\u7801\u53ef\u4ee5\u63d0\u53d6\u5230\u57fa\u7c7b\u4e2d\u65f6\uff0c\u4f7f\u7528\u62bd\u8c61\u7c7b\u3002<br><strong>\u793a\u4f8b<\/strong>\uff1a\u6e38\u620f\u4e2d\u7684\u6240\u6709\u89d2\u8272\u90fd\u6709\u4f4d\u7f6e\u3001\u751f\u547d\u503c\u7b49\u5c5e\u6027\u548c\u79fb\u52a8\u3001\u653b\u51fb\u7b49\u65b9\u6cd5\u3002<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>from abc import ABC, abstractmethod\nfrom datetime import datetime\nfrom typing import Dict\n\n# \u62bd\u8c61\u7c7b\uff1a\u6e38\u620f\u89d2\u8272\u57fa\u7c7b\nclass GameCharacter(ABC):\n    def __init__(self, x: float, y: float, hp: int):\n        self.x = x\n        self.y = y\n        self.hp = hp\n        self.alive = True\n\n    # \u5177\u4f53\u65b9\u6cd5\uff1a\u6240\u6709\u89d2\u8272\u90fd\u8fd9\u6837\u79fb\u52a8\n    def move(self, dx: float, dy: float) -&gt; str:\n        self.x += dx\n        self.y += dy\n        return f\"\u79fb\u52a8\u5230({self.x}, {self.y})\"\n\n    # \u5177\u4f53\u65b9\u6cd5\uff1a\u6240\u6709\u89d2\u8272\u90fd\u8fd9\u6837\u53d7\u4f24\n    def take_damage(self, damage: int) -&gt; str:\n        self.hp -= damage\n        if self.hp &lt;= 0:\n            self.alive = False\n        return f\"\u53d7\u5230{damage}\u70b9\u4f24\u5bb3\uff0c\u5269\u4f59HP: {self.hp}\"\n\n    # \u62bd\u8c61\u65b9\u6cd5\uff1a\u4e0d\u540c\u89d2\u8272\u653b\u51fb\u65b9\u5f0f\u4e0d\u540c\n    @abstractmethod\n    def attack(self) -&gt; str:\n        pass\n\n    # \u62bd\u8c61\u65b9\u6cd5\uff1a\u4e0d\u540c\u89d2\u8272\u6280\u80fd\u4e0d\u540c\n    @abstractmethod\n    def special_skill(self) -&gt; str:\n        pass<\/code><\/pre>\n\n\n\n<h4 class=\"wp-block-heading\">2. \u6a21\u677f\u65b9\u6cd5\u6a21\u5f0f<\/h4>\n\n\n\n<p><strong>\u573a\u666f\u8bf4\u660e<\/strong>\uff1a\u5b9a\u4e49\u7b97\u6cd5\u7684\u9aa8\u67b6\uff0c\u5c06\u67d0\u4e9b\u6b65\u9aa4\u5ef6\u8fdf\u5230\u5b50\u7c7b\u5b9e\u73b0\u3002<br><strong>\u793a\u4f8b<\/strong>\uff1a\u6570\u636e\u5904\u7406\u6d41\u7a0b\u56fa\u5b9a\uff0c\u4f46\u5177\u4f53\u5904\u7406\u903b\u8f91\u7531\u5b50\u7c7b\u51b3\u5b9a\u3002<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code># \u62bd\u8c61\u7c7b\uff1a\u6570\u636e\u5904\u7406\u5668\u6a21\u677f\nclass DataProcessor(ABC):\n    # \u6a21\u677f\u65b9\u6cd5\uff1a\u5b9a\u4e49\u5904\u7406\u6d41\u7a0b\n    def process(self, data: str) -&gt; Dict:\n        # 1. \u9a8c\u8bc1\u6570\u636e\n        self._validate(data)\n\n        # 2. \u6e05\u7406\u6570\u636e\uff08\u5177\u4f53\u7531\u5b50\u7c7b\u5b9e\u73b0\uff09\n        cleaned = self._clean(data)\n\n        # 3. \u8f6c\u6362\u6570\u636e\uff08\u5177\u4f53\u7531\u5b50\u7c7b\u5b9e\u73b0\uff09\n        transformed = self._transform(cleaned)\n\n        # 4. \u4fdd\u5b58\u7ed3\u679c\n        return self._save(transformed)\n\n    def _validate(self, data: str):\n        if not data:\n            raise ValueError(\"\u6570\u636e\u4e0d\u80fd\u4e3a\u7a7a\")\n\n    @abstractmethod\n    def _clean(self, data: str) -&gt; str:\n        pass\n\n    @abstractmethod\n    def _transform(self, data: str) -&gt; Dict:\n        pass\n\n    def _save(self, result: Dict) -&gt; Dict:\n        # \u9ed8\u8ba4\u4fdd\u5b58\u903b\u8f91\n        result&#91;\"processed_at\"] = datetime.now().isoformat()\n        return result<\/code><\/pre>\n\n\n\n<h4 class=\"wp-block-heading\">3. \u9700\u8981\u5171\u4eab\u72b6\u6001<\/h4>\n\n\n\n<p><strong>\u573a\u666f\u8bf4\u660e<\/strong>\uff1a\u5b50\u7c7b\u9700\u8981\u5171\u4eab\u4e00\u4e9b\u516c\u5171\u72b6\u6001\uff08\u5b57\u6bb5\uff09\u3002<br><strong>\u793a\u4f8b<\/strong>\uff1a\u6240\u6709\u5f62\u72b6\u90fd\u6709\u4f4d\u7f6e\u3001\u989c\u8272\u7b49\u5c5e\u6027\uff0c\u6240\u6709\u8f66\u8f86\u90fd\u6709\u901f\u5ea6\u3001\u54c1\u724c\u7b49\u5c5e\u6027\u3002<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code># \u62bd\u8c61\u7c7b\uff1a\u5f62\u72b6\u57fa\u7c7b\nclass Shape(ABC):\n    def __init__(self, x: float, y: float, color: str):\n        self.x = x      # X\u5750\u6807\n        self.y = y      # Y\u5750\u6807\n        self.color = color  # \u989c\u8272\n        self.created_at = datetime.now()\n\n    # \u5177\u4f53\u65b9\u6cd5\uff1a\u6240\u6709\u5f62\u72b6\u90fd\u53ef\u4ee5\u79fb\u52a8\n    def move(self, dx: float, dy: float):\n        self.x += dx\n        self.y += dy\n\n    # \u5177\u4f53\u65b9\u6cd5\uff1a\u6240\u6709\u5f62\u72b6\u90fd\u53ef\u4ee5\u6539\u53d8\u989c\u8272\n    def change_color(self, new_color: str):\n        self.color = new_color\n\n    # \u62bd\u8c61\u65b9\u6cd5\uff1a\u4e0d\u540c\u5f62\u72b6\u8ba1\u7b97\u9762\u79ef\u7684\u65b9\u5f0f\u4e0d\u540c\n    @abstractmethod\n    def area(self) -&gt; float:\n        pass\n\n    # \u62bd\u8c61\u65b9\u6cd5\uff1a\u4e0d\u540c\u5f62\u72b6\u7ed8\u5236\u65b9\u5f0f\u4e0d\u540c\n    @abstractmethod\n    def draw(self) -&gt; str:\n        pass<\/code><\/pre>\n\n\n\n<h4 class=\"wp-block-heading\">4. \u63a7\u5236\u6784\u9020\u8fc7\u7a0b<\/h4>\n\n\n\n<p><strong>\u573a\u666f\u8bf4\u660e<\/strong>\uff1a\u62bd\u8c61\u7c7b\u53ef\u4ee5\u6709\u6784\u9020\u5668\uff0c\u786e\u4fdd\u5b50\u7c7b\u6b63\u786e\u521d\u59cb\u5316\u3002<br><strong>\u793a\u4f8b<\/strong>\uff1a\u786e\u4fdd\u6240\u6709\u6570\u636e\u5e93\u8fde\u63a5\u90fd\u6709\u5fc5\u8981\u7684\u914d\u7f6e\u53c2\u6570\u3002<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code># \u62bd\u8c61\u7c7b\uff1a\u6570\u636e\u5e93\u8fde\u63a5\u57fa\u7c7b\nclass DatabaseConnection(ABC):\n    def __init__(self, host: str, port: int, username: str, password: str):\n        self.host = host\n        self.port = port\n        self.username = username\n        self.password = password\n        self.connected = False\n        self._validate_config()\n\n    def _validate_config(self):\n        \"\"\"\u9a8c\u8bc1\u914d\u7f6e\u53c2\u6570\"\"\"\n        if not self.host:\n            raise ValueError(\"\u4e3b\u673a\u5730\u5740\u4e0d\u80fd\u4e3a\u7a7a\")\n        if self.port &lt;= 0 or self.port &gt; 65535:\n            raise ValueError(\"\u7aef\u53e3\u53f7\u65e0\u6548\")\n\n    # \u6a21\u677f\u65b9\u6cd5\uff1a\u8fde\u63a5\u6570\u636e\u5e93\u7684\u6807\u51c6\u6d41\u7a0b\n    def connect(self) -&gt; str:\n        if self.connected:\n            return \"\u5df2\u7ecf\u8fde\u63a5\"\n\n        # 1. \u5efa\u7acb\u8fde\u63a5\uff08\u5177\u4f53\u7531\u5b50\u7c7b\u5b9e\u73b0\uff09\n        self._establish_connection()\n\n        # 2. \u9a8c\u8bc1\u8fde\u63a5\n        self._validate_connection()\n\n        # 3. \u8bbe\u7f6e\u8fde\u63a5\u72b6\u6001\n        self.connected = True\n\n        return \"\u8fde\u63a5\u6210\u529f\"\n\n    @abstractmethod\n    def _establish_connection(self):\n        pass\n\n    @abstractmethod\n    def _validate_connection(self):\n        pass\n\n    @abstractmethod\n    def execute_query(self, sql: str):\n        pass<\/code><\/pre>\n\n\n\n<h3 class=\"wp-block-heading\">\u4f55\u65f6\u4f7f\u7528\u63a5\u53e3\uff1f<\/h3>\n\n\n\n<p>\u63a5\u53e3\u9002\u7528\u4e8e\u4ee5\u4e0b\u4e94\u79cd\u5178\u578b\u573a\u666f\uff1a<\/p>\n\n\n\n<h4 class=\"wp-block-heading\">1. \u5b9a\u4e49\u884c\u4e3a\u5951\u7ea6<\/h4>\n\n\n\n<p><strong>\u573a\u666f\u8bf4\u660e<\/strong>\uff1a\u591a\u4e2a\u4e0d\u76f8\u5173\u7684\u7c7b\u9700\u8981\u5b9e\u73b0\u76f8\u540c\u7684\u884c\u4e3a\u3002<br><strong>\u793a\u4f8b<\/strong>\uff1a\u53ef\u6bd4\u8f83\u3001\u53ef\u5e8f\u5217\u5316\u3001\u53ef\u7ed8\u5236\u7b49\u80fd\u529b\uff0c\u4e0e\u5177\u4f53\u7c7b\u578b\u65e0\u5173\u3002<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>from typing import Protocol, Any, Tuple\n\n# \u63a5\u53e3\uff1a\u53ef\u6bd4\u8f83\u80fd\u529b\nclass Comparable(Protocol):\n    def __eq__(self, other: Any) -&gt; bool: ...\n    def __lt__(self, other: Any) -&gt; bool: ...\n    def __gt__(self, other: Any) -&gt; bool: ...\n\n# \u63a5\u53e3\uff1a\u53ef\u5e8f\u5217\u5316\u80fd\u529b\nclass Serializable(Protocol):\n    def serialize(self) -&gt; str: ...\n    @classmethod\n    def deserialize(cls, data: str) -&gt; Any: ...\n\n# \u4e0d\u540c\u7684\u7c7b\u5b9e\u73b0\u76f8\u540c\u7684\u63a5\u53e3\nclass Product:\n    def __init__(self, name: str, price: float):\n        self.name = name\n        self.price = price\n\n    # \u5b9e\u73b0Comparable\u63a5\u53e3\n    def __eq__(self, other):\n        return isinstance(other, Product) and self.price == other.price\n\n    def __lt__(self, other):\n        return isinstance(other, Product) and self.price &lt; other.price\n\nclass User:\n    def __init__(self, name: str, age: int):\n        self.name = name\n        self.age = age\n\n    # \u4e5f\u5b9e\u73b0Comparable\u63a5\u53e3\n    def __eq__(self, other):\n        return isinstance(other, User) and self.age == other.age\n\n    def __lt__(self, other):\n        return isinstance(other, User) and self.age &lt; other.age<\/code><\/pre>\n\n\n\n<h4 class=\"wp-block-heading\">2. \u591a\u91cd\u80fd\u529b\u7ec4\u5408<\/h4>\n\n\n\n<p><strong>\u573a\u666f\u8bf4\u660e<\/strong>\uff1a\u4e00\u4e2a\u7c7b\u9700\u8981\u5177\u5907\u591a\u79cd\u4e0d\u540c\u7684\u3001\u72ec\u7acb\u7684\u80fd\u529b\u3002<br><strong>\u793a\u4f8b<\/strong>\uff1a\u667a\u80fd\u624b\u8868\u540c\u65f6\u5177\u6709\u8ba1\u65f6\u3001\u5065\u5eb7\u76d1\u6d4b\u3001\u901a\u77e5\u7b49\u529f\u80fd\u3002<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code># \u591a\u4e2a\u72ec\u7acb\u7684\u63a5\u53e3\nclass Timekeeper(Protocol):\n    def show_time(self) -&gt; str: ...\n    def set_alarm(self, time: str) -&gt; bool: ...\n\nclass HealthMonitor(Protocol):\n    def measure_heart_rate(self) -&gt; int: ...\n    def measure_steps(self) -&gt; int: ...\n\n# \u667a\u80fd\u624b\u8868\u5b9e\u73b0\u591a\u4e2a\u63a5\u53e3\nclass SmartWatch:\n    def show_time(self) -&gt; str:\n        return datetime.now().strftime(\"%H:%M:%S\")\n\n    def set_alarm(self, time: str) -&gt; bool:\n        return True\n\n    def measure_heart_rate(self) -&gt; int:\n        return 72  # \u6a21\u62df\u6570\u636e\n\n    def measure_steps(self) -&gt; int:\n        return 5432  # \u6a21\u62df\u6570\u636e\n\n# \u4f7f\u7528\u63a5\u53e3\u7c7b\u578b\u63d0\u793a\ndef check_health(device: HealthMonitor):\n    print(f\"\u5fc3\u7387: {device.measure_heart_rate()}\")\n\ndef show_time(device: Timekeeper):\n    print(f\"\u5f53\u524d\u65f6\u95f4: {device.show_time()}\")<\/code><\/pre>\n\n\n\n<h4 class=\"wp-block-heading\">3. \u89e3\u8026\u548c\u4f9d\u8d56\u5012\u7f6e<\/h4>\n\n\n\n<p><strong>\u573a\u666f\u8bf4\u660e<\/strong>\uff1a\u9ad8\u5c42\u6a21\u5757\u4e0d\u4f9d\u8d56\u4f4e\u5c42\u6a21\u5757\u7684\u5177\u4f53\u5b9e\u73b0\uff0c\u90fd\u4f9d\u8d56\u62bd\u8c61\u3002<br><strong>\u793a\u4f8b<\/strong>\uff1a\u4e1a\u52a1\u903b\u8f91\u5c42\u4f9d\u8d56Repository\u63a5\u53e3\uff0c\u800c\u4e0d\u662f\u5177\u4f53\u7684\u6570\u636e\u5e93\u5b9e\u73b0\u3002<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>from typing import Dict, Optional\n\n# \u63a5\u53e3\uff1a\u6570\u636e\u4ed3\u5e93\u5951\u7ea6\nclass UserRepository(Protocol):\n    def find_by_id(self, user_id: int) -&gt; Optional&#91;Dict]: ...\n    def save(self, user: Dict) -&gt; bool: ...\n    def delete(self, user_id: int) -&gt; bool: ...\n\n# \u9ad8\u5c42\u6a21\u5757\uff1a\u7528\u6237\u670d\u52a1\uff08\u4f9d\u8d56\u62bd\u8c61\uff09\nclass UserService:\n    def __init__(self, repository: UserRepository):\n        self.repository = repository  # \u4f9d\u8d56\u63a5\u53e3\uff0c\u4e0d\u662f\u5177\u4f53\u5b9e\u73b0\n\n    def get_user(self, user_id: int) -&gt; Optional&#91;Dict]:\n        return self.repository.find_by_id(user_id)\n\n    def register_user(self, user_data: Dict) -&gt; bool:\n        return self.repository.save(user_data)\n\n# \u5177\u4f53\u5b9e\u73b01\uff1aMySQL\u5b58\u50a8\nclass MySQLUserRepository:\n    def __init__(self, connection):\n        self.connection = connection\n\n    def find_by_id(self, user_id: int) -&gt; Optional&#91;Dict]:\n        # \u5b9e\u9645\u7684MySQL\u67e5\u8be2\n        return {\"id\": user_id, \"name\": \"\u5f20\u4e09\"}\n\n    def save(self, user: Dict) -&gt; bool:\n        # \u5b9e\u9645\u7684MySQL\u63d2\u5165\n        return True\n\n# \u5177\u4f53\u5b9e\u73b02\uff1a\u5185\u5b58\u5b58\u50a8\uff08\u7528\u4e8e\u6d4b\u8bd5\uff09\nclass InMemoryUserRepository:\n    def __init__(self):\n        self.users = {}\n\n    def find_by_id(self, user_id: int) -&gt; Optional&#91;Dict]:\n        return self.users.get(user_id)\n\n    def save(self, user: Dict) -&gt; bool:\n        self.users&#91;user&#91;\"id\"]] = user\n        return True\n\n# \u4f7f\u7528\uff1a\u53ef\u4ee5\u8f7b\u677e\u66ff\u6362\u5b9e\u73b0\nservice1 = UserService(MySQLUserRepository(connection))\nservice2 = UserService(InMemoryUserRepository())  # \u6d4b\u8bd5\u65f6\u4f7f\u7528<\/code><\/pre>\n\n\n\n<h4 class=\"wp-block-heading\">4. \u8de8\u7cfb\u7edfAPI\u8bbe\u8ba1<\/h4>\n\n\n\n<p><strong>\u573a\u666f\u8bf4\u660e<\/strong>\uff1a\u5b9a\u4e49\u7cfb\u7edf\u4e4b\u95f4\u7684\u4ea4\u4e92\u5951\u7ea6\uff0c\u4e0d\u5173\u5fc3\u5185\u90e8\u5b9e\u73b0\u3002<br><strong>\u793a\u4f8b<\/strong>\uff1a\u5fae\u670d\u52a1\u4e4b\u95f4\u7684API\u63a5\u53e3\u5b9a\u4e49\u3002<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>from typing import Dict, Any\n\n# \u63a5\u53e3\uff1a\u652f\u4ed8\u670d\u52a1API\nclass PaymentService(Protocol):\n    def create_payment(self, order_id: str, amount: float, \n                      currency: str) -&gt; Dict&#91;str, Any]: ...\n    def get_payment_status(self, payment_id: str) -&gt; Dict&#91;str, Any]: ...\n\n# \u8ba2\u5355\u670d\u52a1\u4f9d\u8d56\u5176\u4ed6\u670d\u52a1\u7684\u63a5\u53e3\nclass OrderService:\n    def __init__(self, payment_service: PaymentService):\n        self.payment_service = payment_service\n\n    def place_order(self, order_data: Dict) -&gt; Dict:\n        # \u521b\u5efa\u652f\u4ed8\n        payment = self.payment_service.create_payment(\n            order_data&#91;\"id\"], \n            order_data&#91;\"amount\"],\n            order_data&#91;\"currency\"]\n        )\n        return {\"order\": order_data, \"payment\": payment}<\/code><\/pre>\n\n\n\n<h4 class=\"wp-block-heading\">5. \u6d4b\u8bd5\u66ff\u8eab\uff08Mock\/Stub\uff09<\/h4>\n\n\n\n<p><strong>\u573a\u666f\u8bf4\u660e<\/strong>\uff1a\u4e3a\u6d4b\u8bd5\u521b\u5efa\u6a21\u62df\u5bf9\u8c61\uff0c\u4e0d\u4f9d\u8d56\u771f\u5b9e\u5b9e\u73b0\u3002<br><strong>\u793a\u4f8b<\/strong>\uff1a\u5355\u5143\u6d4b\u8bd5\u65f6\u4f7f\u7528Mock\u5bf9\u8c61\u66ff\u4ee3\u771f\u5b9e\u4f9d\u8d56\u3002<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>from typing import List\n\n# \u63a5\u53e3\uff1a\u5916\u90e8\u670d\u52a1\nclass WeatherService(Protocol):\n    def get_temperature(self, city: str) -&gt; float: ...\n    def get_forecast(self, city: str) -&gt; List&#91;Dict]: ...\n\n# \u6d4b\u8bd5\u73af\u5883\u5b9e\u73b0\uff1a\u6a21\u62df\u6570\u636e\nclass MockWeatherService:\n    def __init__(self, temperature: float = 25.0):\n        self.temperature = temperature\n\n    def get_temperature(self, city: str) -&gt; float:\n        return self.temperature  # \u8fd4\u56de\u9884\u8bbe\u6e29\u5ea6\n\n# \u4e1a\u52a1\u7c7b\nclass TravelPlanner:\n    def __init__(self, weather_service: WeatherService):\n        self.weather_service = weather_service\n\n    def suggest_clothing(self, city: str) -&gt; str:\n        temp = self.weather_service.get_temperature(city)\n        if temp &gt; 30:\n            return \"\u7a7f\u77ed\u8896\"\n        elif temp &gt; 20:\n            return \"\u7a7f\u957f\u8896\"\n        else:\n            return \"\u7a7f\u5916\u5957\"\n\n# \u6d4b\u8bd5\uff1a\u4f7f\u7528Mock\u5bf9\u8c61\ndef test_travel_planner():\n    # \u4f7f\u7528Mock\u5bf9\u8c61\uff0c\u4e0d\u4f9d\u8d56\u771f\u5b9eAPI\n    mock_service = MockWeatherService(temperature=35.0)\n    planner = TravelPlanner(mock_service)\n\n    result = planner.suggest_clothing(\"Beijing\")\n    assert result == \"\u7a7f\u77ed\u8896\"\n    print(\"\u2705 \u6d4b\u8bd5\u901a\u8fc7\")<\/code><\/pre>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h2 class=\"wp-block-heading\">\u7b2c\u4e94\u90e8\u5206\uff1a\u62bd\u8c61\u7c7b\u4e0e\u63a5\u53e3\u7684\u9009\u62e9\u6307\u5357<\/h2>\n\n\n\n<h3 class=\"wp-block-heading\">\u9009\u62e9\u6307\u5357\uff08\u8003\u8651\u56e0\u7d20\u5bf9\u6bd4\uff09<\/h3>\n\n\n\n<p>\u4ee5\u4e0b\u662f\u9009\u62e9\u62bd\u8c61\u7c7b\u8fd8\u662f\u63a5\u53e3\u65f6\u9700\u8981\u8003\u8651\u7684\u5173\u952e\u56e0\u7d20\uff1a<\/p>\n\n\n\n<h4 class=\"wp-block-heading\">\ud83d\udd0d \u7c7b\u578b\u5173\u7cfb<\/h4>\n\n\n\n<ul class=\"wp-block-list\">\n<li><strong>\u62bd\u8c61\u7c7b<\/strong>\uff1a\u8868\u793a &#8220;\u662f\u4e00\u4e2a (is-a)&#8221; \u5173\u7cfb<\/li>\n\n\n\n<li><strong>\u63a5\u53e3<\/strong>\uff1a\u8868\u793a &#8220;\u5177\u6709\u67d0\u79cd\u80fd\u529b (can-do)&#8221; \u5173\u7cfb<\/li>\n\n\n\n<li><strong>\u793a\u4f8b<\/strong>\uff1aDog \u662f Animal\uff08\u62bd\u8c61\u7c7b\uff09\uff0cBird \u5177\u6709 Flyable \u80fd\u529b\uff08\u63a5\u53e3\uff09<\/li>\n\n\n\n<li><strong>\u8be6\u7ec6\u8bf4\u660e<\/strong>\uff1a\u62bd\u8c61\u7c7b\u63cf\u8ff0\u5bf9\u8c61\u7684\u672c\u8d28\uff0c\u63a5\u53e3\u63cf\u8ff0\u5bf9\u8c61\u7684\u80fd\u529b<\/li>\n<\/ul>\n\n\n\n<h4 class=\"wp-block-heading\">\ud83d\udd0d \u4ee3\u7801\u590d\u7528<\/h4>\n\n\n\n<ul class=\"wp-block-list\">\n<li><strong>\u62bd\u8c61\u7c7b<\/strong>\uff1a\u9700\u8981\u5171\u4eab\u4ee3\u7801\u6216\u516c\u5171\u5b9e\u73b0<\/li>\n\n\n\n<li><strong>\u63a5\u53e3<\/strong>\uff1a\u53ea\u5b9a\u4e49\u5951\u7ea6\uff0c\u4e0d\u63d0\u4f9b\u5b9e\u73b0<\/li>\n\n\n\n<li><strong>\u793a\u4f8b<\/strong>\uff1a\u591a\u4e2a\u6e38\u620f\u89d2\u8272\u5171\u4eab\u79fb\u52a8\u903b\u8f91 \u2192 \u62bd\u8c61\u7c7b<\/li>\n\n\n\n<li><strong>\u8be6\u7ec6\u8bf4\u660e<\/strong>\uff1a\u62bd\u8c61\u7c7b\u53ef\u4ee5\u5305\u542b\u5177\u4f53\u65b9\u6cd5\uff0c\u63a5\u53e3\u901a\u5e38\u53ea\u6709\u65b9\u6cd5\u7b7e\u540d<\/li>\n<\/ul>\n\n\n\n<h4 class=\"wp-block-heading\">\ud83d\udd0d \u72b6\u6001\u5171\u4eab<\/h4>\n\n\n\n<ul class=\"wp-block-list\">\n<li><strong>\u62bd\u8c61\u7c7b<\/strong>\uff1a\u9700\u8981\u5171\u4eab\u72b6\u6001\uff08\u5b57\u6bb5\uff09<\/li>\n\n\n\n<li><strong>\u63a5\u53e3<\/strong>\uff1a\u4e0d\u80fd\u5305\u542b\u5b9e\u4f8b\u5b57\u6bb5\uff08\u67d0\u4e9b\u8bed\u8a00\u5141\u8bb8\u5e38\u91cf\uff09<\/li>\n\n\n\n<li><strong>\u793a\u4f8b<\/strong>\uff1a\u6240\u6709\u5f62\u72b6\u90fd\u6709\u4f4d\u7f6e\u3001\u989c\u8272 \u2192 \u62bd\u8c61\u7c7b<\/li>\n\n\n\n<li><strong>\u8be6\u7ec6\u8bf4\u660e<\/strong>\uff1a\u62bd\u8c61\u7c7b\u53ef\u4ee5\u6709\u6784\u9020\u5668\u548c\u5b57\u6bb5\uff0c\u63a5\u53e3\u901a\u5e38\u4e0d\u80fd<\/li>\n<\/ul>\n\n\n\n<h4 class=\"wp-block-heading\">\ud83d\udd0d \u591a\u91cd\u7ee7\u627f<\/h4>\n\n\n\n<ul class=\"wp-block-list\">\n<li><strong>\u62bd\u8c61\u7c7b<\/strong>\uff1a\u5355\u7ee7\u627f\uff0c\u4e00\u4e2a\u7c7b\u53ea\u80fd\u7ee7\u627f\u4e00\u4e2a\u62bd\u8c61\u7c7b<\/li>\n\n\n\n<li><strong>\u63a5\u53e3<\/strong>\uff1a\u591a\u5b9e\u73b0\uff0c\u4e00\u4e2a\u7c7b\u53ef\u4ee5\u5b9e\u73b0\u591a\u4e2a\u63a5\u53e3<\/li>\n\n\n\n<li><strong>\u793a\u4f8b<\/strong>\uff1aBird \u9700\u8981 Animal \u5c5e\u6027\u548c Flyable\u3001Swimmable \u80fd\u529b<\/li>\n\n\n\n<li><strong>\u8be6\u7ec6\u8bf4\u660e<\/strong>\uff1a\u4f7f\u7528\u62bd\u8c61\u7c7b+\u591a\u4e2a\u63a5\u53e3\u7684\u7ec4\u5408\u65b9\u5f0f<\/li>\n<\/ul>\n\n\n\n<h4 class=\"wp-block-heading\">\ud83d\udd0d \u8bbe\u8ba1\u7a33\u5b9a\u6027<\/h4>\n\n\n\n<ul class=\"wp-block-list\">\n<li><strong>\u62bd\u8c61\u7c7b<\/strong>\uff1a\u4e00\u65e6\u53d1\u5e03\uff0c\u4fee\u6539\u53ef\u80fd\u7834\u574f\u73b0\u6709\u5b50\u7c7b<\/li>\n\n\n\n<li><strong>\u63a5\u53e3<\/strong>\uff1aJava 8+\/C# 8.0+ \u53ef\u4ee5\u7528\u9ed8\u8ba4\u65b9\u6cd5\u6269\u5c55<\/li>\n\n\n\n<li><strong>\u793a\u4f8b<\/strong>\uff1a\u63a5\u53e3\u6dfb\u52a0\u65b0\u65b9\u6cd5 \u2192 \u4f7f\u7528\u9ed8\u8ba4\u5b9e\u73b0\u4fdd\u6301\u517c\u5bb9<\/li>\n\n\n\n<li><strong>\u8be6\u7ec6\u8bf4\u660e<\/strong>\uff1a\u63a5\u53e3\u66f4\u5bb9\u6613\u6f14\u8fdb\uff0c\u5bf9\u4fee\u6539\u66f4\u53cb\u597d<\/li>\n<\/ul>\n\n\n\n<h4 class=\"wp-block-heading\">\ud83d\udd0d \u6846\u67b6\u8bbe\u8ba1<\/h4>\n\n\n\n<ul class=\"wp-block-list\">\n<li><strong>\u62bd\u8c61\u7c7b<\/strong>\uff1a\u9002\u5408\u5b9a\u4e49\u6846\u67b6\u57fa\u7c7b\uff0c\u63d0\u4f9b\u9aa8\u67b6\u5b9e\u73b0<\/li>\n\n\n\n<li><strong>\u63a5\u53e3<\/strong>\uff1a\u9002\u5408\u5b9a\u4e49\u63d2\u4ef6\u63a5\u53e3\uff0c\u5141\u8bb8\u7b2c\u4e09\u65b9\u6269\u5c55<\/li>\n\n\n\n<li><strong>\u793a\u4f8b<\/strong>\uff1aSpring \u7684 ApplicationListener \u662f\u63a5\u53e3\uff0c\u65b9\u4fbf\u6269\u5c55<\/li>\n\n\n\n<li><strong>\u8be6\u7ec6\u8bf4\u660e<\/strong>\uff1a\u6846\u67b6\u901a\u5e38&#8221;\u9762\u5411\u63a5\u53e3\u7f16\u7a0b&#8221;\uff0c\u63d0\u4f9b\u62bd\u8c61\u7c7b\u4f5c\u4e3a\u4fbf\u5229<\/li>\n<\/ul>\n\n\n\n<h4 class=\"wp-block-heading\">\ud83d\udd0d \u6d4b\u8bd5\u53cb\u597d\u6027<\/h4>\n\n\n\n<ul class=\"wp-block-list\">\n<li><strong>\u62bd\u8c61\u7c7b<\/strong>\uff1a\u53ef\u80fd\u5305\u542b\u5177\u4f53\u903b\u8f91\uff0c\u6d4b\u8bd5\u8f83\u590d\u6742<\/li>\n\n\n\n<li><strong>\u63a5\u53e3<\/strong>\uff1a\u53ea\u5b9a\u4e49\u5951\u7ea6\uff0c\u66f4\u5bb9\u6613\u521b\u5efa\u6d4b\u8bd5\u66ff\u8eab<\/li>\n\n\n\n<li><strong>\u793a\u4f8b<\/strong>\uff1a\u4f9d\u8d56\u6ce8\u5165\u65f6\uff0c\u63a5\u53e3\u66f4\u5bb9\u6613Mock<\/li>\n\n\n\n<li><strong>\u8be6\u7ec6\u8bf4\u660e<\/strong>\uff1a\u63a5\u53e3\u652f\u6301\u66f4\u597d\u7684\u4f9d\u8d56\u5012\u7f6e\u548c\u6d4b\u8bd5<\/li>\n<\/ul>\n\n\n\n<h3 class=\"wp-block-heading\">\u51b3\u7b56\u6d41\u7a0b\u56fe<\/h3>\n\n\n\n<pre class=\"wp-block-code\"><code>\u5f00\u59cb\n  \u2193\n\u9700\u8981\u5b9a\u4e49\u7c7b\u578b\u5173\u7cfb\u5417\uff1f (is-a)\n  \u251c\u2500\u2500 \u662f \u2192 \u9700\u8981\u5171\u4eab\u4ee3\u7801\/\u72b6\u6001\u5417\uff1f\n  \u2502       \u251c\u2500\u2500 \u662f \u2192 \u4f7f\u7528\u62bd\u8c61\u7c7b\n  \u2502       \u2514\u2500\u2500 \u5426 \u2192 \u8003\u8651\u4f7f\u7528\u63a5\u53e3\n  \u2502\n  \u2514\u2500\u2500 \u5426 \u2192 \u9700\u8981\u5b9a\u4e49\u884c\u4e3a\u5951\u7ea6\u5417\uff1f (can-do)\n          \u251c\u2500\u2500 \u662f \u2192 \u9700\u8981\u591a\u91cd\u7ee7\u627f\u5417\uff1f\n          \u2502       \u251c\u2500\u2500 \u662f \u2192 \u4f7f\u7528\u63a5\u53e3\n          \u2502       \u2514\u2500\u2500 \u5426 \u2192 \u90fd\u53ef\u4ee5\uff0c\u4f18\u5148\u63a5\u53e3\n          \u2502\n          \u2514\u2500\u2500 \u5426 \u2192 \u91cd\u65b0\u601d\u8003\u8bbe\u8ba1<\/code><\/pre>\n\n\n\n<h3 class=\"wp-block-heading\">\u901a\u7528\u539f\u5219<\/h3>\n\n\n\n<ol class=\"wp-block-list\">\n<li><strong>\u4f18\u5148\u4f7f\u7528\u63a5\u53e3<\/strong>\uff08\u66f4\u7075\u6d3b\uff0c\u66f4\u89e3\u8026\uff09<\/li>\n\n\n\n<li><strong>\u9700\u8981\u4ee3\u7801\u590d\u7528\u65f6\u4f7f\u7528\u62bd\u8c61\u7c7b<\/strong><\/li>\n\n\n\n<li><strong>\u7ed3\u5408\u4f7f\u7528<\/strong>\uff1a\u62bd\u8c61\u7c7b\u5b9a\u4e49\u6838\u5fc3\uff0c\u63a5\u53e3\u5b9a\u4e49\u80fd\u529b<\/li>\n\n\n\n<li><strong>\u9762\u5411\u63a5\u53e3\u7f16\u7a0b<\/strong>\uff0c\u800c\u4e0d\u662f\u9762\u5411\u5b9e\u73b0\u7f16\u7a0b<\/li>\n\n\n\n<li><strong>\u4fdd\u6301\u63a5\u53e3\u5c0f\u800c\u4e13\u4e00<\/strong>\uff08\u63a5\u53e3\u9694\u79bb\u539f\u5219\uff09<\/li>\n<\/ol>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h2 class=\"wp-block-heading\">\u7b2c\u516d\u90e8\u5206\uff1a\u5b9e\u6218\u6848\u4f8b\uff1a\u7535\u5546\u7cfb\u7edf\u8bbe\u8ba1<\/h2>\n\n\n\n<h3 class=\"wp-block-heading\">1. \u4f7f\u7528\u62bd\u8c61\u7c7b\uff1a\u7535\u5546\u5b9e\u4f53\u57fa\u7c7b\u8bbe\u8ba1<\/h3>\n\n\n\n<pre class=\"wp-block-code\"><code>from abc import ABC, abstractmethod\nfrom typing import Dict, List, Optional, Any\nfrom datetime import datetime\nfrom enum import Enum\n\nclass Entity(ABC):\n    \"\"\"\u62bd\u8c61\u7c7b\uff1a\u6240\u6709\u5b9e\u4f53\u7684\u57fa\u7c7b\uff08\u5171\u4eabID\u548c\u65f6\u95f4\u6233\uff09\"\"\"\n\n    def __init__(self, entity_id: int):\n        self.id = entity_id\n        self.created_at = datetime.now()\n        self.updated_at = datetime.now()\n\n    def update_timestamp(self):\n        \"\"\"\u5177\u4f53\u65b9\u6cd5\uff1a\u66f4\u65b0\u65f6\u95f4\u6233\"\"\"\n        self.updated_at = datetime.now()\n\n    @abstractmethod\n    def to_dict(self) -&gt; Dict&#91;str, Any]:\n        \"\"\"\u62bd\u8c61\u65b9\u6cd5\uff1a\u8f6c\u6362\u4e3a\u5b57\u5178\"\"\"\n        pass\n\n    @abstractmethod\n    def validate(self) -&gt; bool:\n        \"\"\"\u62bd\u8c61\u65b9\u6cd5\uff1a\u9a8c\u8bc1\u6570\u636e\"\"\"\n        pass\n\n    # \u5177\u4f53\u65b9\u6cd5\uff1a\u6240\u6709\u5b9e\u4f53\u5171\u4eab\n    def get_metadata(self) -&gt; Dict&#91;str, Any]:\n        return {\n            \"id\": self.id,\n            \"created_at\": self.created_at.isoformat(),\n            \"updated_at\": self.updated_at.isoformat(),\n            \"type\": self.__class__.__name__\n        }<\/code><\/pre>\n\n\n\n<h3 class=\"wp-block-heading\">2. \u4f7f\u7528\u63a5\u53e3\uff1a\u7535\u5546\u80fd\u529b\u5b9a\u4e49<\/h3>\n\n\n\n<pre class=\"wp-block-code\"><code>from typing import Protocol, Tuple\n\nclass Pricable(Protocol):\n    \"\"\"\u63a5\u53e3\uff1a\u53ef\u5b9a\u4ef7\u80fd\u529b\"\"\"\n\n    def calculate_price(self) -&gt; float:\n        \"\"\"\u8ba1\u7b97\u4ef7\u683c\"\"\"\n        ...\n\n    def apply_discount(self, discount_percent: float) -&gt; float:\n        \"\"\"\u5e94\u7528\u6298\u6263\"\"\"\n        ...\n\nclass Stockable(Protocol):\n    \"\"\"\u63a5\u53e3\uff1a\u53ef\u5e93\u5b58\u7ba1\u7406\u80fd\u529b\"\"\"\n\n    def check_stock(self) -&gt; int:\n        \"\"\"\u68c0\u67e5\u5e93\u5b58\"\"\"\n        ...\n\n    def update_stock(self, quantity: int) -&gt; bool:\n        \"\"\"\u66f4\u65b0\u5e93\u5b58\"\"\"\n        ...\n\nclass Shippable(Protocol):\n    \"\"\"\u63a5\u53e3\uff1a\u53ef\u53d1\u8d27\u80fd\u529b\"\"\"\n\n    def calculate_shipping_cost(self, address: str) -&gt; float:\n        \"\"\"\u8ba1\u7b97\u8fd0\u8d39\"\"\"\n        ...\n\n    def can_ship_to(self, address: str) -&gt; bool:\n        \"\"\"\u68c0\u67e5\u662f\u5426\u53ef\u53d1\u8d27\u5230\u5730\u5740\"\"\"\n        ...<\/code><\/pre>\n\n\n\n<h3 class=\"wp-block-heading\">3. \u5177\u4f53\u5b9e\u4f53\u7c7b\u5b9e\u73b0<\/h3>\n\n\n\n<pre class=\"wp-block-code\"><code>class Product(Entity, Pricable, Stockable):\n    \"\"\"\u4ea7\u54c1\u7c7b\uff1a\u7ee7\u627f\u5b9e\u4f53\u57fa\u7c7b\uff0c\u5b9e\u73b0\u591a\u4e2a\u63a5\u53e3\"\"\"\n\n    def __init__(self, product_id: int, name: str, base_price: float, \n                 stock: int = 0, category: str = \"\"):\n        super().__init__(product_id)\n        self.name = name\n        self.base_price = base_price\n        self.stock = stock\n        self.category = category\n        self.discount = 0.0\n\n    # \u5b9e\u73b0Entity\u62bd\u8c61\u65b9\u6cd5\n    def to_dict(self) -&gt; Dict&#91;str, Any]:\n        return {\n            **self.get_metadata(),\n            \"name\": self.name,\n            \"base_price\": self.base_price,\n            \"current_price\": self.calculate_price(),\n            \"stock\": self.stock,\n            \"category\": self.category,\n            \"discount\": self.discount\n        }\n\n    def validate(self) -&gt; bool:\n        return bool(self.name and self.base_price &gt; 0)\n\n    # \u5b9e\u73b0Pricable\u63a5\u53e3\n    def calculate_price(self) -&gt; float:\n        return self.base_price * (1 - self.discount \/ 100)\n\n    def apply_discount(self, discount_percent: float) -&gt; float:\n        self.discount = discount_percent\n        self.update_timestamp()\n        return self.calculate_price()\n\n    # \u5b9e\u73b0Stockable\u63a5\u53e3\n    def check_stock(self) -&gt; int:\n        return self.stock\n\n    def update_stock(self, quantity: int) -&gt; bool:\n        if self.stock + quantity &lt; 0:\n            return False\n        self.stock += quantity\n        self.update_timestamp()\n        return True<\/code><\/pre>\n\n\n\n<h3 class=\"wp-block-heading\">4. \u670d\u52a1\u5c42\uff1a\u9762\u5411\u63a5\u53e3\u7f16\u7a0b<\/h3>\n\n\n\n<pre class=\"wp-block-code\"><code>class PricingService:\n    \"\"\"\u5b9a\u4ef7\u670d\u52a1\"\"\"\n\n    def calculate_total(self, pricable_item: Pricable) -&gt; float:\n        \"\"\"\u8ba1\u7b97\u603b\u4ef7\uff08\u4f9d\u8d56Pricable\u63a5\u53e3\uff09\"\"\"\n        return pricable_item.calculate_price()\n\n    def apply_discount_to_all(self, items: List&#91;Pricable], \n                             discount_percent: float) -&gt; List&#91;float]:\n        \"\"\"\u7ed9\u6240\u6709\u5546\u54c1\u5e94\u7528\u6298\u6263\"\"\"\n        return &#91;item.apply_discount(discount_percent) \n                for item in items]\n\nclass InventoryService:\n    \"\"\"\u5e93\u5b58\u670d\u52a1\"\"\"\n\n    def check_inventory(self, stockable_items: List&#91;Stockable]) -&gt; Dict&#91;str, int]:\n        \"\"\"\u68c0\u67e5\u5e93\u5b58\uff08\u4f9d\u8d56Stockable\u63a5\u53e3\uff09\"\"\"\n        return {\n            f\"Item_{i}\": item.check_stock()\n            for i, item in enumerate(stockable_items)\n        }\n\n    def restock_all(self, stockable_items: List&#91;Stockable], \n                   quantity: int) -&gt; bool:\n        \"\"\"\u8865\u8d27\u6240\u6709\u5546\u54c1\"\"\"\n        results = &#91;item.update_stock(quantity) \n                  for item in stockable_items]\n        return all(results)<\/code><\/pre>\n\n\n\n<h3 class=\"wp-block-heading\">\u7535\u5546\u7cfb\u7edf\u8bbe\u8ba1\u603b\u7ed3<\/h3>\n\n\n\n<ol class=\"wp-block-list\">\n<li><strong>\u62bd\u8c61\u7c7bEntity<\/strong>\uff1a\u63d0\u4f9b\u6240\u6709\u5b9e\u4f53\u7684\u516c\u5171\u57fa\u7c7b\uff08ID\u3001\u65f6\u95f4\u6233\uff09<\/li>\n\n\n\n<li><strong>\u63a5\u53e3Pricable\/Stockable\u7b49<\/strong>\uff1a\u5b9a\u4e49\u5546\u54c1\u7684\u7279\u5b9a\u80fd\u529b<\/li>\n\n\n\n<li><strong>\u5177\u4f53\u7c7bProduct\/Order<\/strong>\uff1a\u7ee7\u627f\u62bd\u8c61\u7c7b\uff0c\u5b9e\u73b0\u591a\u4e2a\u63a5\u53e3<\/li>\n\n\n\n<li><strong>\u670d\u52a1\u5c42<\/strong>\uff1a\u9762\u5411\u63a5\u53e3\u7f16\u7a0b\uff0c\u63d0\u9ad8\u7075\u6d3b\u6027\u548c\u53ef\u6d4b\u8bd5\u6027<\/li>\n\n\n\n<li><strong>\u7ec4\u5408\u4f7f\u7528<\/strong>\uff1a\u62bd\u8c61\u7c7b\u63d0\u4f9b\u9aa8\u67b6\uff0c\u63a5\u53e3\u63d0\u4f9b\u80fd\u529b\uff0c\u670d\u52a1\u5c42\u4f7f\u7528\u63a5\u53e3<\/li>\n<\/ol>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h2 class=\"wp-block-heading\">\u7b2c\u4e03\u90e8\u5206\uff1a\u62bd\u8c61\u7c7b\u4e0e\u63a5\u53e3\u7684\u6f14\u8fdb\u7b56\u7565<\/h2>\n\n\n\n<h3 class=\"wp-block-heading\">\u63a5\u53e3\u7684\u6f14\u8fdb\uff08Java 8+ \/ C# 8.0+\uff09<\/h3>\n\n\n\n<pre class=\"wp-block-code\"><code>\/\/ Java\u793a\u4f8b\uff1a\u63a5\u53e3\u7684\u6f14\u8fdb\npublic interface PaymentProcessor {\n    \/\/ \u539f\u59cb\u65b9\u6cd5\n    PaymentResult process(PaymentRequest request);\n\n    \/\/ Java 8+: \u6dfb\u52a0\u9ed8\u8ba4\u65b9\u6cd5\uff08\u5411\u540e\u517c\u5bb9\uff09\n    default PaymentResult processWithRetry(PaymentRequest request, int retries) {\n        for (int i = 0; i &lt; retries; i++) {\n            try {\n                return process(request);\n            } catch (PaymentException e) {\n                if (i == retries - 1) throw e;\n            }\n        }\n        throw new IllegalStateException(\"\u4e0d\u5e94\u8be5\u5230\u8fbe\u8fd9\u91cc\");\n    }\n\n    \/\/ Java 8+: \u6dfb\u52a0\u9759\u6001\u65b9\u6cd5\n    static PaymentProcessor createDefault() {\n        return new DefaultPaymentProcessor();\n    }\n}<\/code><\/pre>\n\n\n\n<h3 class=\"wp-block-heading\">\u62bd\u8c61\u7c7b\u7684\u6f14\u8fdb\u7b56\u7565<\/h3>\n\n\n\n<pre class=\"wp-block-code\"><code>\/\/ \u62bd\u8c61\u7c7b\u7684\u6f14\u8fdb\u7b56\u7565\npublic abstract class DataExporter {\n    \/\/ \u539f\u59cb\u62bd\u8c61\u65b9\u6cd5\n    public abstract byte&#91;] export(Data data);\n\n    \/\/ \u6dfb\u52a0\u5177\u4f53\u65b9\u6cd5\uff08\u5b89\u5168\uff09\n    public File exportToFile(Data data, String filename) throws IOException {\n        byte&#91;] bytes = export(data);\n        File file = new File(filename);\n        Files.write(file.toPath(), bytes);\n        return file;\n    }\n\n    \/\/ \u26a0\ufe0f \u5371\u9669\uff1a\u6dfb\u52a0\u65b0\u7684\u62bd\u8c61\u65b9\u6cd5\u4f1a\u7834\u574f\u6240\u6709\u5b50\u7c7b\n    \/\/ public abstract void preProcess(Data data);  \/\/ \u4e0d\u8981\u8fd9\u6837\u505a\uff01\n\n    \/\/ \u66f4\u597d\u7684\u65b9\u5f0f\uff1a\u6dfb\u52a0\u5e26\u9ed8\u8ba4\u5b9e\u73b0\u7684\u94a9\u5b50\u65b9\u6cd5\n    protected void preProcess(Data data) {\n        \/\/ \u9ed8\u8ba4\u4ec0\u4e48\u4e5f\u4e0d\u505a\uff0c\u5b50\u7c7b\u53ef\u4ee5\u91cd\u5199\n    }\n}<\/code><\/pre>\n\n\n\n<h3 class=\"wp-block-heading\">\u6f14\u8fdb\u7b56\u7565\u5bf9\u6bd4<\/h3>\n\n\n\n<h4 class=\"wp-block-heading\">\ud83d\udd38 \u63a5\u53e3\u9ed8\u8ba4\u65b9\u6cd5<\/h4>\n\n\n\n<ul class=\"wp-block-list\">\n<li><strong>\u9002\u7528\u573a\u666f<\/strong>\uff1a\u5411\u540e\u517c\u5bb9\u5730\u6dfb\u52a0\u65b0\u529f\u80fd<\/li>\n\n\n\n<li><strong>\u4f18\u70b9<\/strong>\uff1a\u4e0d\u7834\u574f\u73b0\u6709\u5b9e\u73b0\uff0c\u5e73\u6ed1\u6f14\u8fdb<\/li>\n\n\n\n<li><strong>\u7f3a\u70b9<\/strong>\uff1a\u53ef\u80fd\u9020\u6210&#8221;\u83f1\u5f62\u7ee7\u627f&#8221;\u95ee\u9898\uff08\u591a\u91cd\u7ee7\u627f\u51b2\u7a81\uff09<\/li>\n\n\n\n<li><strong>\u793a\u4f8b<\/strong>\uff1aJava 8\u7684Collection.stream()\u65b9\u6cd5<\/li>\n<\/ul>\n\n\n\n<h4 class=\"wp-block-heading\">\ud83d\udd38 \u62bd\u8c61\u7c7b\u5177\u4f53\u65b9\u6cd5<\/h4>\n\n\n\n<ul class=\"wp-block-list\">\n<li><strong>\u9002\u7528\u573a\u666f<\/strong>\uff1a\u63d0\u4f9b\u901a\u7528\u5b9e\u73b0\uff0c\u4ee3\u7801\u590d\u7528<\/li>\n\n\n\n<li><strong>\u4f18\u70b9<\/strong>\uff1a\u5b50\u7c7b\u81ea\u52a8\u83b7\u5f97\u529f\u80fd\uff0c\u51cf\u5c11\u91cd\u590d\u4ee3\u7801<\/li>\n\n\n\n<li><strong>\u7f3a\u70b9<\/strong>\uff1a\u5355\u7ee7\u627f\u9650\u5236\uff0c\u53ef\u80fd\u4f7f\u7c7b\u5c42\u6b21\u590d\u6742<\/li>\n\n\n\n<li><strong>\u793a\u4f8b<\/strong>\uff1aAndroid\u7684Activity\u7c7b\u63d0\u4f9b\u751f\u547d\u5468\u671f\u65b9\u6cd5<\/li>\n<\/ul>\n\n\n\n<h3 class=\"wp-block-heading\">\u6f14\u8fdb\u6700\u4f73\u5b9e\u8df5<\/h3>\n\n\n\n<ol class=\"wp-block-list\">\n<li>\u4f18\u5148\u4f7f\u7528\u63a5\u53e3\uff0c\u66f4\u5bb9\u6613\u6f14\u8fdb\u548c\u6269\u5c55<\/li>\n\n\n\n<li>\u4f7f\u7528\u9ed8\u8ba4\u65b9\u6cd5\u8fdb\u884c\u5c0f\u5e45\u5ea6\u3001\u5411\u540e\u517c\u5bb9\u7684\u6269\u5c55<\/li>\n\n\n\n<li>\u62bd\u8c61\u7c7b\u9002\u5408\u7a33\u5b9a\u7684\u3001\u4e0d\u5e38\u53d8\u5316\u7684\u6838\u5fc3\u903b\u8f91<\/li>\n\n\n\n<li>\u91cd\u5927\u53d8\u66f4\u65f6\u8003\u8651\u521b\u5efa\u65b0\u63a5\u53e3\uff0c\u800c\u4e0d\u662f\u4fee\u6539\u65e7\u63a5\u53e3<\/li>\n\n\n\n<li>\u4fdd\u6301\u63a5\u53e3\u5c0f\u800c\u4e13\u4e00\uff0c\u51cf\u5c11\u4fee\u6539\u7684\u5f71\u54cd\u8303\u56f4<\/li>\n<\/ol>\n\n\n\n<h3 class=\"wp-block-heading\">\u73b0\u4ee3\u8bed\u8a00\u8d8b\u52bf<\/h3>\n\n\n\n<ul class=\"wp-block-list\">\n<li>\u63a5\u53e3\u529f\u80fd\u589e\u5f3a\uff1a\u9ed8\u8ba4\u65b9\u6cd5\u3001\u9759\u6001\u65b9\u6cd5\u3001\u79c1\u6709\u65b9\u6cd5<\/li>\n\n\n\n<li>\u62bd\u8c61\u7c7b\u4e0e\u63a5\u53e3\u754c\u9650\u6a21\u7cca\uff1aC# 8.0\u63a5\u53e3\u53ef\u4ee5\u6709\u5b9e\u73b0<\/li>\n\n\n\n<li>\u66f4\u5f3a\u8c03\u7ec4\u5408\u800c\u975e\u7ee7\u627f\uff1a\u63a5\u53e3\u7ec4\u5408\u4f18\u4e8e\u7c7b\u7ee7\u627f<\/li>\n\n\n\n<li>\u51fd\u6570\u5f0f\u63a5\u53e3\uff1a\u5355\u4e00\u62bd\u8c61\u65b9\u6cd5\u7684\u63a5\u53e3<\/li>\n<\/ul>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h2 class=\"wp-block-heading\">\u7b2c\u516b\u90e8\u5206\uff1a\u5b66\u4e60\u603b\u7ed3\u4e0e\u9762\u8bd5\u51c6\u5907<\/h2>\n\n\n\n<h3 class=\"wp-block-heading\">\u6838\u5fc3\u8981\u70b9\u603b\u7ed3<\/h3>\n\n\n\n<ol class=\"wp-block-list\">\n<li><strong>\u672c\u8d28\u533a\u522b<\/strong>\uff1a\u62bd\u8c61\u7c7b\u5b9a\u4e49&#8217;\u662f\u4ec0\u4e48&#8217;\uff08is-a\uff09\uff0c\u63a5\u53e3\u5b9a\u4e49&#8217;\u80fd\u505a\u4ec0\u4e48&#8217;\uff08can-do\uff09<\/li>\n\n\n\n<li><strong>\u5b9e\u73b0\u65b9\u5f0f<\/strong>\uff1a\u62bd\u8c61\u7c7b\u53ef\u4ee5\u5305\u542b\u5b9e\u73b0\uff0c\u63a5\u53e3\u901a\u5e38\u53ea\u5b9a\u4e49\u5951\u7ea6<\/li>\n\n\n\n<li><strong>\u7ee7\u627f\u5173\u7cfb<\/strong>\uff1a\u5355\u7ee7\u627f vs \u591a\u5b9e\u73b0\uff0c\u8fd9\u662f\u6700\u5173\u952e\u7684\u67b6\u6784\u51b3\u7b56\u70b9<\/li>\n\n\n\n<li><strong>\u72b6\u6001\u7ba1\u7406<\/strong>\uff1a\u62bd\u8c61\u7c7b\u53ef\u4ee5\u6709\u72b6\u6001\uff08\u5b57\u6bb5\uff09\uff0c\u63a5\u53e3\u901a\u5e38\u65e0\u72b6\u6001<\/li>\n\n\n\n<li><strong>\u4f7f\u7528\u65f6\u673a<\/strong>\uff1a\u9700\u8981\u5171\u4eab\u4ee3\u7801\u7528\u62bd\u8c61\u7c7b\uff0c\u9700\u8981\u5b9a\u4e49\u5951\u7ea6\u7528\u63a5\u53e3<\/li>\n\n\n\n<li><strong>\u7ec4\u5408\u4f7f\u7528<\/strong>\uff1a\u73b0\u4ee3\u8bbe\u8ba1\u901a\u5e38\u7ec4\u5408\u4f7f\u7528\uff0c\u62bd\u8c61\u7c7b\u63d0\u4f9b\u9aa8\u67b6\uff0c\u63a5\u53e3\u63d0\u4f9b\u80fd\u529b<\/li>\n<\/ol>\n\n\n\n<h3 class=\"wp-block-heading\">\u8bbe\u8ba1\u539f\u5219\u5e94\u7528<\/h3>\n\n\n\n<ul class=\"wp-block-list\">\n<li><strong>\u5355\u4e00\u804c\u8d23\u539f\u5219<\/strong>\uff1a\u63a5\u53e3\u5e94\u8be5\u5c0f\u800c\u4e13\u4e00\uff0c\u4e00\u4e2a\u63a5\u53e3\u53ea\u5b9a\u4e49\u4e00\u4e2a\u804c\u8d23<\/li>\n\n\n\n<li><strong>\u63a5\u53e3\u9694\u79bb\u539f\u5219<\/strong>\uff1a\u4e0d\u8981\u5f3a\u8feb\u5ba2\u6237\u7aef\u4f9d\u8d56\u5b83\u4eec\u4e0d\u7528\u7684\u65b9\u6cd5<\/li>\n\n\n\n<li><strong>\u4f9d\u8d56\u5012\u7f6e\u539f\u5219<\/strong>\uff1a\u4f9d\u8d56\u62bd\u8c61\uff08\u63a5\u53e3\/\u62bd\u8c61\u7c7b\uff09\uff0c\u4e0d\u4f9d\u8d56\u5177\u4f53\u5b9e\u73b0<\/li>\n\n\n\n<li><strong>\u5f00\u95ed\u539f\u5219<\/strong>\uff1a\u901a\u8fc7\u63a5\u53e3\u6269\u5c55\uff0c\u800c\u4e0d\u662f\u4fee\u6539\u73b0\u6709\u4ee3\u7801<\/li>\n<\/ul>\n\n\n\n<h3 class=\"wp-block-heading\">\u6700\u7ec8\u601d\u8003<\/h3>\n\n\n\n<p>\u62bd\u8c61\u7c7b\u548c\u63a5\u53e3\u662f\u9762\u5411\u5bf9\u8c61\u8bbe\u8ba1\u7684\u4e24\u5927\u652f\u67f1\uff0c\u7406\u89e3\u5b83\u4eec\u7684\u533a\u522b\u548c\u9002\u7528\u573a\u666f\u81f3\u5173\u91cd\u8981\u3002\u62bd\u8c61\u7c7b\u63d0\u4f9b&#8217;\u662f\u4ec0\u4e48&#8217;\u7684\u9aa8\u67b6\u548c\u5171\u4eab\u5b9e\u73b0\uff0c\u63a5\u53e3\u63d0\u4f9b&#8217;\u80fd\u505a\u4ec0\u4e48&#8217;\u7684\u5951\u7ea6\u548c\u591a\u6001\u80fd\u529b\u3002\u5728\u73b0\u4ee3\u8f6f\u4ef6\u8bbe\u8ba1\u4e2d\uff0c\u4f18\u5148\u4f7f\u7528\u63a5\u53e3\uff0c\u9700\u8981\u4ee3\u7801\u590d\u7528\u65f6\u4f7f\u7528\u62bd\u8c61\u7c7b\uff0c\u4e24\u8005\u7ed3\u5408\u4f7f\u7528\u6548\u679c\u6700\u4f73\u3002\u8bb0\u4f4f\uff1a\u597d\u7684\u8bbe\u8ba1\u4e0d\u662f\u6559\u6761\u5730\u9075\u5faa\u89c4\u5219\uff0c\u800c\u662f\u6839\u636e\u5177\u4f53\u573a\u666f\u505a\u51fa\u5408\u9002\u7684\u9009\u62e9\u3002\u901a\u8fc7\u4e0d\u65ad\u5b9e\u8df5\u548c\u53cd\u601d\uff0c\u4f60\u4f1a\u9010\u6e10\u57f9\u517b\u51fa\u5bf9\u62bd\u8c61\u7c7b\u548c\u63a5\u53e3\u7684\u654f\u9510\u76f4\u89c9\u3002<\/p>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<p><strong>\u7b2c\u56db\u5341\u4e09\u8bfe\uff1a\u62bd\u8c61\u7c7b\u4e0e\u63a5\u53e3\u7684\u5177\u4f53\u533a\u522b &#8211; \u5b8c<\/strong><\/p>\n\n\n\n<h2 class=\"wp-block-heading\">\u7b2c\u56db\u5341\u56db\u8bfe\uff1a\u503c\u4f20\u9012 vs \u5f15\u7528\u4f20\u9012\u7684\u6df1\u5ea6\u89e3\u6790<\/h2>\n\n\n\n<h2 class=\"wp-block-heading\">\u524d\u8a00\uff1a\u6570\u636e\u4f20\u9012\u7684\u672c\u8d28<\/h2>\n\n\n\n<p>\u5728\u7f16\u7a0b\u4e2d\uff0c\u7406\u89e3\u6570\u636e\u5982\u4f55\u5728\u4e0d\u540c\u4f5c\u7528\u57df\u4e4b\u95f4\u4f20\u9012\u662f\u81f3\u5173\u91cd\u8981\u7684\u3002\u503c\u4f20\u9012\u548c\u5f15\u7528\u4f20\u9012\u662f\u4e24\u79cd\u57fa\u672c\u7684\u6570\u636e\u4f20\u9012\u65b9\u5f0f\uff0c\u5b83\u4eec\u5f71\u54cd\u7740\u7a0b\u5e8f\u7684\u6027\u80fd\u3001\u5185\u5b58\u4f7f\u7528\u548c\u903b\u8f91\u6b63\u786e\u6027\u3002\u4eca\u5929\uff0c\u6211\u4eec\u5c06\u6df1\u5165\u63a2\u8ba8\u8fd9\u4e24\u79cd\u4f20\u9012\u65b9\u5f0f\u7684\u672c\u8d28\u533a\u522b\uff0c\u4ee5\u53ca\u5b83\u4eec\u5728\u4e0d\u540c\u7f16\u7a0b\u8bed\u8a00\u4e2d\u7684\u5b9e\u73b0\u3002<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">\u7b2c\u4e00\u90e8\u5206\uff1a\u6838\u5fc3\u6982\u5ff5\u89e3\u6790<\/h2>\n\n\n\n<h3 class=\"wp-block-heading\">1.1 \u4ec0\u4e48\u662f\u503c\u4f20\u9012\uff1f<\/h3>\n\n\n\n<p><strong>\u503c\u4f20\u9012\uff08Pass by Value\uff09<\/strong> \u6307\u7684\u662f\u5728\u51fd\u6570\u8c03\u7528\u65f6\uff0c\u5c06\u5b9e\u9645\u53c2\u6570\u7684\u503c\u590d\u5236\u4e00\u4efd\u4f20\u9012\u7ed9\u51fd\u6570\u7684\u5f62\u5f0f\u53c2\u6570\u3002\u5728\u51fd\u6570\u5185\u90e8\u5bf9\u5f62\u5f0f\u53c2\u6570\u7684\u4fee\u6539\u4e0d\u4f1a\u5f71\u54cd\u5230\u539f\u59cb\u7684\u5b9e\u9645\u53c2\u6570\u3002<\/p>\n\n\n\n<p><strong>\u503c\u4f20\u9012\u7684\u7279\u70b9\uff1a<\/strong><\/p>\n\n\n\n<ol class=\"wp-block-list\">\n<li>\u4f20\u9012\u7684\u662f\u6570\u636e\u7684\u526f\u672c\uff08\u590d\u5236\u4e00\u4efd\uff09<\/li>\n\n\n\n<li>\u51fd\u6570\u5185\u5bf9\u53c2\u6570\u7684\u4fee\u6539\u4e0d\u5f71\u54cd\u539f\u59cb\u6570\u636e<\/li>\n\n\n\n<li>\u9002\u7528\u4e8e\u57fa\u672c\u6570\u636e\u7c7b\u578b\uff08int, float, bool\u7b49\uff09<\/li>\n\n\n\n<li>\u5185\u5b58\u6d88\u8017\uff1a\u6bcf\u6b21\u8c03\u7528\u90fd\u521b\u5efa\u65b0\u526f\u672c<\/li>\n\n\n\n<li>\u5b89\u5168\u6027\uff1a\u539f\u59cb\u6570\u636e\u4e0d\u4f1a\u88ab\u610f\u5916\u4fee\u6539<\/li>\n<\/ol>\n\n\n\n<p><strong>\u503c\u4f20\u9012\u53ef\u89c6\u5316\uff1a<\/strong><br>\u8c03\u7528\u524d\uff1a<br>original_num \u2500\u2500\u5b58\u50a8\u2500\u2500&gt; 5 (\u5185\u5b58\u5730\u5740: 0x1000)<\/p>\n\n\n\n<p>\u8c03\u7528\u65f6\uff08\u503c\u4f20\u9012\uff09\uff1a<\/p>\n\n\n\n<ol class=\"wp-block-list\">\n<li>\u521b\u5efa\u526f\u672c: copy_num = 5<\/li>\n\n\n\n<li>copy_num \u2500\u2500\u5b58\u50a8\u2500\u2500> 5 (\u65b0\u5185\u5b58\u5730\u5740: 0x2000)<\/li>\n<\/ol>\n\n\n\n<p>\u51fd\u6570\u5185\u4fee\u6539\uff1a<br>copy_num += 10, \u73b0\u5728 copy_num = 15 (\u5730\u5740: 0x2000)<\/p>\n\n\n\n<p>\u51fd\u6570\u8fd4\u56de\u540e\uff1a<br>original_num \u4ecd\u7136\u662f 5 (\u5730\u5740: 0x1000)<br>copy_num \u88ab\u9500\u6bc1<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code># ============================================================================\n# \u503c\u4f20\u9012\u793a\u4f8b\n# ============================================================================\n\ndef increment_by_value(num: int) -&gt; None:\n    \"\"\"\u503c\u4f20\u9012\u793a\u4f8b\uff1a\u4fee\u6539\u4e0d\u4f1a\u5f71\u54cd\u539f\u59cb\u6570\u636e\"\"\"\n    num += 10\n\n# \u6d4b\u8bd5\u503c\u4f20\u9012\noriginal_num = 5\nincrement_by_value(original_num)\n# original_num \u4ecd\u7136\u662f 5<\/code><\/pre>\n\n\n\n<h3 class=\"wp-block-heading\">1.2 \u4ec0\u4e48\u662f\u5f15\u7528\u4f20\u9012\uff1f<\/h3>\n\n\n\n<p><strong>\u5f15\u7528\u4f20\u9012\uff08Pass by Reference\uff09<\/strong> \u6307\u7684\u662f\u5728\u51fd\u6570\u8c03\u7528\u65f6\uff0c\u5c06\u5b9e\u9645\u53c2\u6570\u7684\u5f15\u7528\uff08\u5185\u5b58\u5730\u5740\uff09\u4f20\u9012\u7ed9\u51fd\u6570\u7684\u5f62\u5f0f\u53c2\u6570\u3002\u5728\u51fd\u6570\u5185\u90e8\u5bf9\u5f62\u5f0f\u53c2\u6570\u7684\u4fee\u6539\u4f1a\u76f4\u63a5\u5f71\u54cd\u5230\u539f\u59cb\u7684\u5b9e\u9645\u53c2\u6570\u3002<\/p>\n\n\n\n<p><strong>\u5f15\u7528\u4f20\u9012\u7684\u7279\u70b9\uff1a<\/strong><\/p>\n\n\n\n<ol class=\"wp-block-list\">\n<li>\u4f20\u9012\u7684\u662f\u6570\u636e\u7684\u5f15\u7528\uff08\u5185\u5b58\u5730\u5740\uff09<\/li>\n\n\n\n<li>\u51fd\u6570\u5185\u5bf9\u53c2\u6570\u7684\u4fee\u6539\u4f1a\u5f71\u54cd\u539f\u59cb\u6570\u636e<\/li>\n\n\n\n<li>\u9002\u7528\u4e8e\u590d\u6742\u6570\u636e\u7c7b\u578b\uff08\u5217\u8868\u3001\u5b57\u5178\u3001\u5bf9\u8c61\u7b49\uff09<\/li>\n\n\n\n<li>\u5185\u5b58\u6548\u7387\uff1a\u4e0d\u521b\u5efa\u6570\u636e\u526f\u672c\uff0c\u53ea\u4f20\u9012\u5f15\u7528<\/li>\n\n\n\n<li>\u98ce\u9669\uff1a\u539f\u59cb\u6570\u636e\u53ef\u80fd\u88ab\u610f\u5916\u4fee\u6539<\/li>\n<\/ol>\n\n\n\n<p><strong>\u5f15\u7528\u4f20\u9012\u53ef\u89c6\u5316\uff1a<\/strong><br>\u8c03\u7528\u524d\uff1a<br>original_list \u2500\u2500\u5f15\u7528\u2500\u2500&gt; [1, 2, 3] (\u5185\u5b58\u5730\u5740: 0x3000)<\/p>\n\n\n\n<p>\u8c03\u7528\u65f6\uff08\u5f15\u7528\u4f20\u9012\uff09\uff1a<\/p>\n\n\n\n<ol class=\"wp-block-list\">\n<li>\u4f20\u9012\u5f15\u7528: nums = \u5f15\u7528\u5230 0x3000<\/li>\n\n\n\n<li>nums \u548c original_list \u6307\u5411\u540c\u4e00\u4e2a\u5185\u5b58\u5730\u5740<\/li>\n<\/ol>\n\n\n\n<p>\u51fd\u6570\u5185\u4fee\u6539\uff1a<br>nums.append(100)<br>\u5185\u5b58 0x3000 \u5904\u7684\u5217\u8868\u53d8\u4e3a [1, 2, 3, 100]<\/p>\n\n\n\n<p>\u51fd\u6570\u8fd4\u56de\u540e\uff1a<br>original_list \u770b\u5230\u7684\u662f\u4fee\u6539\u540e\u7684 [1, 2, 3, 100]<br>\u56e0\u4e3a\u4e24\u8005\u5f15\u7528\u7684\u662f\u540c\u4e00\u4e2a\u5185\u5b58\u5bf9\u8c61<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code># ============================================================================\n# \u5f15\u7528\u4f20\u9012\u793a\u4f8b\n# ============================================================================\n\ndef increment_by_reference(nums: list) -&gt; None:\n    \"\"\"\u5f15\u7528\u4f20\u9012\u793a\u4f8b\uff1a\u4fee\u6539\u4f1a\u5f71\u54cd\u539f\u59cb\u6570\u636e\"\"\"\n    nums.append(100)\n\n# \u6d4b\u8bd5\u5f15\u7528\u4f20\u9012\noriginal_list = &#91;1, 2, 3]\nincrement_by_reference(original_list)\n# original_list \u53d8\u4e3a &#91;1, 2, 3, 100]<\/code><\/pre>\n\n\n\n<h3 class=\"wp-block-heading\">1.3 \u5173\u952e\u6982\u5ff5\u6f84\u6e05<\/h3>\n\n\n\n<p><strong>\u6f84\u6e051\uff1a\u53d8\u91cf\u3001\u503c\u3001\u5f15\u7528\u7684\u5173\u7cfb\uff1a<\/strong><\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>\u53d8\u91cf\uff1a\u5185\u5b58\u4e2d\u5b58\u50a8\u6570\u636e\u7684\u547d\u540d\u4f4d\u7f6e\uff08\u5982\uff1ax, my_list\uff09\n\u503c\uff1a\u5b58\u50a8\u5728\u53d8\u91cf\u4e2d\u7684\u5b9e\u9645\u6570\u636e\uff08\u5982\uff1a5, \"hello\", &#91;1,2,3]\uff09\n\u5f15\u7528\uff1a\u6307\u5411\u5185\u5b58\u4e2d\u67d0\u4e2a\u503c\u7684\u6307\u9488\u6216\u5730\u5740\n\n\u5173\u7cfb\uff1a\n  \u53d8\u91cf \u2192 \u5f15\u7528 \u2192 \u503c\uff08\u5185\u5b58\u4e2d\u7684\u5b9e\u9645\u6570\u636e\uff09\n\n\u793a\u4f8b\uff1a\n  x = 5\n    \u2022 \u53d8\u91cf\uff1ax\n    \u2022 \u503c\uff1a5\uff08\u5b58\u50a8\u5728\u5185\u5b58\u67d0\u4e2a\u4f4d\u7f6e\uff09\n    \u2022 \u5f15\u7528\uff1a\u6307\u5411\u5b58\u50a85\u7684\u5185\u5b58\u5730\u5740\n\n  my_list = &#91;1, 2, 3]\n    \u2022 \u53d8\u91cf\uff1amy_list\n    \u2022 \u503c\uff1a&#91;1, 2, 3]\uff08\u5b58\u50a8\u5728\u5185\u5b58\u67d0\u4e2a\u4f4d\u7f6e\uff09\n    \u2022 \u5f15\u7528\uff1a\u6307\u5411\u5b58\u50a8\u5217\u8868\u7684\u5185\u5b58\u5730\u5740<\/code><\/pre>\n\n\n\n<p><strong>\u6f84\u6e052\uff1a\u8d4b\u503c\u64cd\u4f5c\u7684\u672c\u8d28\uff1a<\/strong><\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>\u5728Python\u4e2d\uff0c\u8d4b\u503c(=)\u5b9e\u9645\u4e0a\u662f\u5efa\u7acb\u5f15\u7528\u5173\u7cfb\uff0c\u800c\u4e0d\u662f\u590d\u5236\u6570\u636e\u3002\n\n\u793a\u4f8b1\uff1a\u57fa\u672c\u7c7b\u578b\u8d4b\u503c\n  a = 5\n  b = a  # b\u73b0\u5728\u5f15\u7528\u4e0ea\u76f8\u540c\u7684\u503c5\n  a = 10 # \u4e3aa\u521b\u5efa\u65b0\u503c10\uff0cb\u4ecd\u7136\u5f15\u75285\n\n\u793a\u4f8b2\uff1a\u5f15\u7528\u7c7b\u578b\u8d4b\u503c\n  list1 = &#91;1, 2, 3]\n  list2 = list1  # list2\u5f15\u7528\u4e0elist1\u76f8\u540c\u7684\u5217\u8868\u5bf9\u8c61\n  list1.append(4) # \u4fee\u6539\u5171\u4eab\u7684\u5217\u8868\uff0clist2\u4e5f\u4f1a\u770b\u5230\u53d8\u5316\n\n\u56fe\u793a\uff1a\n  \u57fa\u672c\u7c7b\u578b\uff1a\n    \u521d\u59cb\uff1aa \u2192 5\n    \u8d4b\u503c\uff1ab \u2192 a \u2192 5\n    \u4fee\u6539\uff1aa \u2192 10, b \u2192 5 (b\u4e0d\u53d8)\n\n  \u5f15\u7528\u7c7b\u578b\uff1a\n    \u521d\u59cb\uff1alist1 \u2192 &#91;1,2,3]\n    \u8d4b\u503c\uff1alist2 \u2192 list1 \u2192 &#91;1,2,3]\n    \u4fee\u6539\uff1alist1 \u2192 &#91;1,2,3,4] \u2190 list2 (\u4e24\u8005\u90fd\u53d8)<\/code><\/pre>\n\n\n\n<p><strong>\u6f84\u6e053\uff1a\u53ef\u53d8\u5bf9\u8c61 vs \u4e0d\u53ef\u53d8\u5bf9\u8c61\uff1a<\/strong><\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>\u4e0d\u53ef\u53d8\u5bf9\u8c61\uff08Immutable\uff09\uff1a\n  \u2022 \u521b\u5efa\u540e\u4e0d\u80fd\u88ab\u4fee\u6539\n  \u2022 \u4fee\u6539\u64cd\u4f5c\u5b9e\u9645\u4e0a\u662f\u521b\u5efa\u65b0\u5bf9\u8c61\n  \u2022 \u5305\u62ec\uff1aint, float, bool, str, tuple, frozenset\n\n\u53ef\u53d8\u5bf9\u8c61\uff08Mutable\uff09\uff1a\n  \u2022 \u521b\u5efa\u540e\u53ef\u4ee5\u88ab\u4fee\u6539\n  \u2022 \u4fee\u6539\u64cd\u4f5c\u5728\u539f\u5bf9\u8c61\u4e0a\u8fdb\u884c\n  \u2022 \u5305\u62ec\uff1alist, dict, set, \u81ea\u5b9a\u4e49\u5bf9\u8c61\n\n\u793a\u4f8b\uff1a\n  \u4e0d\u53ef\u53d8\u5bf9\u8c61\uff08\u5b57\u7b26\u4e32\uff09\uff1a\n    s = \"hello\"\n    s += \" world\"  # \u521b\u5efa\u65b0\u5b57\u7b26\u4e32\"hello world\"\uff0cs\u5f15\u7528\u65b0\u5bf9\u8c61\n\n  \u53ef\u53d8\u5bf9\u8c61\uff08\u5217\u8868\uff09\uff1a\n    lst = &#91;1, 2]\n    lst.append(3)   # \u5728\u539f\u5217\u8868\u4e0a\u6dfb\u52a03\uff0clst\u5f15\u7528\u4e0d\u53d8<\/code><\/pre>\n\n\n\n<h2 class=\"wp-block-heading\">\u7b2c\u4e8c\u90e8\u5206\uff1a\u5404\u8bed\u8a00\u4e2d\u7684\u53c2\u6570\u4f20\u9012\u65b9\u5f0f<\/h2>\n\n\n\n<h3 class=\"wp-block-heading\">2.1 Python\uff1a\u5bf9\u8c61\u5f15\u7528\u4f20\u9012<\/h3>\n\n\n\n<p><strong>Python\u7684\u53c2\u6570\u4f20\u9012\u673a\u5236\uff1a<\/strong><br>Python\u7684\u53c2\u6570\u4f20\u9012\u662f&#8221;\u5bf9\u8c61\u5f15\u7528\u4f20\u9012&#8221;\uff08Pass by Object Reference\uff09<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>\u4f20\u9012\u7684\u662f\u5bf9\u8c61\u7684\u5f15\u7528\uff08\u5185\u5b58\u5730\u5740\uff09<\/li>\n\n\n\n<li>\u5bf9\u4e8e\u4e0d\u53ef\u53d8\u5bf9\u8c61\uff0c\u8868\u73b0\u7c7b\u4f3c\u503c\u4f20\u9012<\/li>\n\n\n\n<li>\u5bf9\u4e8e\u53ef\u53d8\u5bf9\u8c61\uff0c\u8868\u73b0\u7c7b\u4f3c\u5f15\u7528\u4f20\u9012<\/li>\n<\/ul>\n\n\n\n<pre class=\"wp-block-code\"><code># ============================================================================\n# Python\uff1a\u5bf9\u8c61\u5f15\u7528\u4f20\u9012\n# ============================================================================\n\ndef demonstrate_python_passing():\n    \"\"\"\u6f14\u793aPython\u7684\u53c2\u6570\u4f20\u9012\u884c\u4e3a\"\"\"\n\n    print(\"1. \u4e0d\u53ef\u53d8\u5bf9\u8c61\uff08\u7c7b\u4f3c\u503c\u4f20\u9012\u884c\u4e3a\uff09\uff1a\")\n\n    def modify_immutable(num: int, text: str, tup: tuple):\n        # \u5c1d\u8bd5\u4fee\u6539\uff08\u5b9e\u9645\u4e0a\u662f\u521b\u5efa\u65b0\u5bf9\u8c61\uff09\n        num += 10\n        text += \" modified\"\n\n    original_num = 5\n    original_text = \"hello\"\n    original_tup = (1, 2, 3)\n\n    modify_immutable(original_num, original_text, original_tup)\n    # original_num, original_text, original_tup \u90fd\u672a\u88ab\u4fee\u6539\n\n    print(\"2. \u53ef\u53d8\u5bf9\u8c61\uff08\u7c7b\u4f3c\u5f15\u7528\u4f20\u9012\u884c\u4e3a\uff09\uff1a\")\n\n    def modify_mutable(lst: list, dct: dict):\n        # \u4fee\u6539\u53ef\u53d8\u5bf9\u8c61\n        lst.append(100)\n        dct&#91;\"new_key\"] = \"new_value\"\n\n    original_list = &#91;1, 2, 3]\n    original_dict = {\"key\": \"value\"}\n\n    modify_mutable(original_list, original_dict)\n    # original_list \u548c original_dict \u90fd\u88ab\u4fee\u6539\u4e86\n\n    print(\"3. \u91cd\u65b0\u7ed1\u5b9a vs \u539f\u5730\u4fee\u6539\uff1a\")\n\n    def reassign_vs_modify(lst: list):\n        \"\"\"\u6f14\u793a\u91cd\u65b0\u7ed1\u5b9a\u4e0e\u539f\u5730\u4fee\u6539\u7684\u533a\u522b\"\"\"\n        # \u60c5\u51b51\uff1a\u539f\u5730\u4fee\u6539\uff08\u4f1a\u5f71\u54cd\u8c03\u7528\u8005\uff09\n        lst.append(999)\n\n        # \u60c5\u51b52\uff1a\u91cd\u65b0\u7ed1\u5b9a\uff08\u4e0d\u4f1a\u5f71\u54cd\u8c03\u7528\u8005\uff09\n        lst = &#91;100, 200, 300]  # \u91cd\u65b0\u7ed1\u5b9a\u5230\u65b0\u5217\u8868\n\n        # \u60c5\u51b53\uff1a\u4f7f\u7528\u5207\u7247\u521b\u5efa\u65b0\u5217\u8868\n        lst&#91;:] = &#91;7, 8, 9]  # \u5207\u7247\u8d4b\u503c\uff0c\u539f\u5730\u4fee\u6539\n\n    test_list = &#91;1, 2, 3]\n    reassign_vs_modify(test_list)\n    # test_list \u88ab\u4fee\u6539\u4e3a &#91;1, 2, 3, 999]\n\ndemonstrate_python_passing()<\/code><\/pre>\n\n\n\n<p><strong>Python\u53c2\u6570\u4f20\u9012\u603b\u7ed3\uff1a<\/strong><\/p>\n\n\n\n<ol class=\"wp-block-list\">\n<li>\u6240\u6709\u53c2\u6570\u90fd\u662f&#8217;\u5bf9\u8c61\u5f15\u7528&#8217;\u4f20\u9012<\/li>\n\n\n\n<li>\u4e0d\u53ef\u53d8\u5bf9\u8c61\uff1a\u51fd\u6570\u5185\u4e0d\u80fd\u4fee\u6539\u539f\u59cb\u5bf9\u8c61\uff08\u7c7b\u4f3c\u503c\u4f20\u9012\uff09<\/li>\n\n\n\n<li>\u53ef\u53d8\u5bf9\u8c61\uff1a\u51fd\u6570\u5185\u53ef\u4ee5\u4fee\u6539\u539f\u59cb\u5bf9\u8c61\uff08\u7c7b\u4f3c\u5f15\u7528\u4f20\u9012\uff09<\/li>\n\n\n\n<li>\u91cd\u65b0\u8d4b\u503c\uff08=\uff09\u4f1a\u521b\u5efa\u65b0\u5f15\u7528\uff0c\u4e0d\u5f71\u54cd\u539f\u59cb\u53d8\u91cf<\/li>\n\n\n\n<li>\u5207\u7247\u3001append\u7b49\u64cd\u4f5c\u4f1a\u4fee\u6539\u539f\u5bf9\u8c61\uff0c\u5f71\u54cd\u539f\u59cb\u53d8\u91cf<\/li>\n<\/ol>\n\n\n\n<h3 class=\"wp-block-heading\">2.2 Java\uff1a\u503c\u4f20\u9012\uff08\u4f46\u4f20\u9012\u7684\u662f\u5f15\u7528\u503c\uff09<\/h3>\n\n\n\n<p><strong>Java\u7684\u53c2\u6570\u4f20\u9012\u673a\u5236\uff1a<\/strong><br>Java\u4e25\u683c\u6765\u8bf4\u662f&#8221;\u503c\u4f20\u9012&#8221;\uff0c\u4f46\u5bf9\u4e8e\u5bf9\u8c61\u7c7b\u578b\uff0c\u4f20\u9012\u7684\u662f\u5bf9\u8c61\u5f15\u7528\u7684\u526f\u672c\uff08\u503c\uff09\uff0c\u800c\u4e0d\u662f\u5bf9\u8c61\u672c\u8eab\u7684\u526f\u672c\u3002<\/p>\n\n\n\n<p>\u5173\u952e\u70b9\uff1a<\/p>\n\n\n\n<ol class=\"wp-block-list\">\n<li>\u57fa\u672c\u7c7b\u578b\uff08int, double, boolean\u7b49\uff09\uff1a\u4f20\u9012\u503c\u7684\u526f\u672c<\/li>\n\n\n\n<li>\u5bf9\u8c61\u7c7b\u578b\uff08String, \u6570\u7ec4, \u81ea\u5b9a\u4e49\u5bf9\u8c61\uff09\uff1a\u4f20\u9012\u5f15\u7528\u7684\u526f\u672c<\/li>\n\n\n\n<li>Java\u4e2d\u7684String\u662f\u4e0d\u53ef\u53d8\u5bf9\u8c61\uff0c\u6240\u4ee5\u8868\u73b0\u7c7b\u4f3c\u57fa\u672c\u7c7b\u578b<\/li>\n<\/ol>\n\n\n\n<pre class=\"wp-block-code\"><code>\/\/ Java\u4ee3\u7801\u793a\u4f8b\uff1a\npublic class ParameterPassingDemo {\n    public static void main(String&#91;] args) {\n        System.out.println(\"=== \u57fa\u672c\u7c7b\u578b\uff08\u503c\u4f20\u9012\uff09===\");\n        int x = 5;\n        modifyPrimitive(x);\n        \/\/ x\u4ecd\u7136\u662f5\n\n        System.out.println(\"\\n=== \u5bf9\u8c61\u7c7b\u578b\uff08\u4f20\u9012\u5f15\u7528\u526f\u672c\uff09===\");\n        int&#91;] array = {1, 2, 3};\n        modifyArray(array);\n        \/\/ \u6570\u7ec4\u88ab\u4fee\u6539\u4e3a&#91;999, 2, 3]\n\n        System.out.println(\"\\n=== String\uff08\u4e0d\u53ef\u53d8\u5bf9\u8c61\uff09===\");\n        String str = \"hello\";\n        modifyString(str);\n        \/\/ str\u4ecd\u7136\u662f\"hello\"\n    }\n\n    \/\/ \u57fa\u672c\u7c7b\u578b\uff1a\u503c\u4f20\u9012\n    static void modifyPrimitive(int num) {\n        num = 100;  \/\/ \u53ea\u4fee\u6539\u526f\u672c\uff0c\u4e0d\u5f71\u54cd\u539f\u59cb\u503c\n    }\n\n    \/\/ \u6570\u7ec4\uff1a\u4f20\u9012\u5f15\u7528\u7684\u526f\u672c\n    static void modifyArray(int&#91;] arr) {\n        arr&#91;0] = 999;  \/\/ \u901a\u8fc7\u5f15\u7528\u526f\u672c\u4fee\u6539\u539f\u6570\u7ec4\n    }\n\n    \/\/ String\uff1a\u4e0d\u53ef\u53d8\u5bf9\u8c61\n    static void modifyString(String s) {\n        s = s + \" world\";  \/\/ \u521b\u5efa\u65b0String\uff0c\u4e0d\u5f71\u54cd\u539f\u59cb\u5f15\u7528\n    }\n}<\/code><\/pre>\n\n\n\n<p><strong>Java\u53c2\u6570\u4f20\u9012\u603b\u7ed3\uff1a<\/strong><\/p>\n\n\n\n<ol class=\"wp-block-list\">\n<li>Java\u4e25\u683c\u9075\u5faa\u503c\u4f20\u9012\uff08\u4f20\u9012\u503c\u7684\u526f\u672c\uff09<\/li>\n\n\n\n<li>\u5bf9\u4e8e\u57fa\u672c\u7c7b\u578b\uff1a\u4f20\u9012\u57fa\u672c\u503c\u7684\u526f\u672c<\/li>\n\n\n\n<li>\u5bf9\u4e8e\u5bf9\u8c61\u7c7b\u578b\uff1a\u4f20\u9012\u5bf9\u8c61\u5f15\u7528\u7684\u526f\u672c<\/li>\n\n\n\n<li>\u53ef\u4ee5\u901a\u8fc7\u5f15\u7528\u526f\u672c\u4fee\u6539\u5bf9\u8c61\u5185\u5bb9\uff0c\u4f46\u65e0\u6cd5\u4fee\u6539\u539f\u59cb\u5f15\u7528\u672c\u8eab<\/li>\n\n\n\n<li>String\u7b49\u4e0d\u53ef\u53d8\u5bf9\u8c61\u8868\u73b0\u7c7b\u4f3c\u57fa\u672c\u7c7b\u578b<\/li>\n<\/ol>\n\n\n\n<h3 class=\"wp-block-heading\">2.3 C++\uff1a\u652f\u6301\u503c\u4f20\u9012\u548c\u5f15\u7528\u4f20\u9012<\/h3>\n\n\n\n<p><strong>C++\u7684\u53c2\u6570\u4f20\u9012\u673a\u5236\uff1a<\/strong><br>C++\u63d0\u4f9b\u4e86\u4e24\u79cd\u53c2\u6570\u4f20\u9012\u65b9\u5f0f\uff1a<\/p>\n\n\n\n<ol class=\"wp-block-list\">\n<li>\u503c\u4f20\u9012\uff08\u9ed8\u8ba4\uff09\uff1a\u4f20\u9012\u6570\u636e\u7684\u526f\u672c<\/li>\n\n\n\n<li>\u5f15\u7528\u4f20\u9012\uff1a\u4f20\u9012\u6570\u636e\u7684\u5f15\u7528\uff08\u522b\u540d\uff09<\/li>\n\n\n\n<li>\u6307\u9488\u4f20\u9012\uff08\u672c\u8d28\u662f\u503c\u4f20\u9012\u6307\u9488\u7684\u503c\uff09<\/li>\n<\/ol>\n\n\n\n<pre class=\"wp-block-code\"><code>\/\/ C++\u4ee3\u7801\u793a\u4f8b\uff1a\n#include &lt;iostream&gt;\n#include &lt;vector&gt;\nusing namespace std;\n\n\/\/ 1. \u503c\u4f20\u9012\nvoid passByValue(int x) {\n    x = 100;  \/\/ \u4fee\u6539\u526f\u672c\n}\n\n\/\/ 2. \u5f15\u7528\u4f20\u9012\nvoid passByReference(int &amp;x) {\n    x = 100;  \/\/ \u4fee\u6539\u539f\u59cb\u53d8\u91cf\n}\n\n\/\/ 3. \u6307\u9488\u4f20\u9012\uff08\u503c\u4f20\u9012\u6307\u9488\u7684\u526f\u672c\uff09\nvoid passByPointer(int *ptr) {\n    *ptr = 200;  \/\/ \u901a\u8fc7\u6307\u9488\u4fee\u6539\u539f\u59cb\u503c\n    ptr = nullptr;  \/\/ \u53ea\u4fee\u6539\u6307\u9488\u526f\u672c\uff0c\u4e0d\u5f71\u54cd\u539f\u59cb\u6307\u9488\n}\n\n\/\/ 4. \u5e38\u91cf\u5f15\u7528\uff08\u907f\u514d\u590d\u5236\u5927\u5bf9\u8c61\uff09\nvoid passByConstReference(const vector&lt;int&gt; &amp;vec) {\n    \/\/ vec.push_back(100);  \/\/ \u9519\u8bef\uff1a\u4e0d\u80fd\u4fee\u6539\u5e38\u91cf\u5f15\u7528\n    cout &lt;&lt; \"\u51fd\u6570\u5185\uff08\u5e38\u91cf\u5f15\u7528\uff09: \u5411\u91cf\u5927\u5c0f = \" &lt;&lt; vec.size() &lt;&lt; endl;\n}\n\nint main() {\n    cout &lt;&lt; \"=== \u503c\u4f20\u9012 vs \u5f15\u7528\u4f20\u9012 ===\" &lt;&lt; endl;\n    int a = 5;\n\n    passByValue(a);\n    \/\/ a\u4ecd\u7136\u662f5\n\n    passByReference(a);\n    \/\/ a\u53d8\u4e3a100\n\n    cout &lt;&lt; \"\\n=== \u6307\u9488\u4f20\u9012 ===\" &lt;&lt; endl;\n    int b = 50;\n    int *ptr = &amp;b;\n\n    passByPointer(ptr);\n    \/\/ b\u53d8\u4e3a200\uff0cptr\u672c\u8eab\u672a\u88ab\u4fee\u6539\n\n    cout &lt;&lt; \"\\n=== \u5e38\u91cf\u5f15\u7528\uff08\u6027\u80fd\u4f18\u5316\uff09===\" &lt;&lt; endl;\n    vector&lt;int&gt; largeVector(1000000, 1);  \/\/ \u5927\u5411\u91cf\n    passByConstReference(largeVector);\n\n    return 0;\n}<\/code><\/pre>\n\n\n\n<p><strong>C++\u53c2\u6570\u4f20\u9012\u603b\u7ed3\uff1a<\/strong><\/p>\n\n\n\n<ol class=\"wp-block-list\">\n<li>\u503c\u4f20\u9012\uff08\u9ed8\u8ba4\uff09\uff1a\u4f20\u9012\u526f\u672c\uff0c\u5b89\u5168\u4f46\u53ef\u80fd\u4f4e\u6548\uff08\u5bf9\u4e8e\u5927\u5bf9\u8c61\uff09<\/li>\n\n\n\n<li>\u5f15\u7528\u4f20\u9012\uff08&amp;\uff09\uff1a\u4f20\u9012\u522b\u540d\uff0c\u9ad8\u6548\u4e14\u53ef\u4fee\u6539\u539f\u59cb\u6570\u636e<\/li>\n\n\n\n<li>\u5e38\u91cf\u5f15\u7528\uff08const &amp;\uff09\uff1a\u9ad8\u6548\u4e14\u5b89\u5168\uff0c\u907f\u514d\u4e0d\u5fc5\u8981\u7684\u590d\u5236<\/li>\n\n\n\n<li>\u6307\u9488\u4f20\u9012\uff1a\u503c\u4f20\u9012\u6307\u9488\u7684\u526f\u672c\uff0c\u53ef\u901a\u8fc7\u6307\u9488\u4fee\u6539\u6570\u636e<\/li>\n\n\n\n<li>C++\u8ba9\u7a0b\u5e8f\u5458\u53ef\u4ee5\u663e\u5f0f\u9009\u62e9\u4f20\u9012\u65b9\u5f0f\uff0c\u63d0\u4f9b\u66f4\u5927\u7684\u63a7\u5236\u6743<\/li>\n<\/ol>\n\n\n\n<h3 class=\"wp-block-heading\">2.4 JavaScript\uff1a\u7c7b\u4f3cJava\u7684\u5bf9\u8c61\u5f15\u7528\u4f20\u9012<\/h3>\n\n\n\n<p><strong>JavaScript\u7684\u53c2\u6570\u4f20\u9012\u673a\u5236\uff1a<\/strong><\/p>\n\n\n\n<ol class=\"wp-block-list\">\n<li>\u57fa\u672c\u7c7b\u578b\uff08Number, String, Boolean, null, undefined, Symbol, BigInt\uff09\uff1a\u503c\u4f20\u9012<\/li>\n\n\n\n<li>\u5bf9\u8c61\u7c7b\u578b\uff08Object, Array, Function, Date\u7b49\uff09\uff1a\u4f20\u9012\u5f15\u7528\u7684\u526f\u672c<\/li>\n\n\n\n<li>\u6ce8\u610f\uff1aJavaScript\u4e2d\u7684\u5b57\u7b26\u4e32\u662f\u4e0d\u53ef\u53d8\u7684\uff0c\u8868\u73b0\u7c7b\u4f3c\u503c\u4f20\u9012<\/li>\n<\/ol>\n\n\n\n<pre class=\"wp-block-code\"><code>\/\/ JavaScript\u4ee3\u7801\u793a\u4f8b\uff1a\nconsole.log(\"=== \u57fa\u672c\u7c7b\u578b\uff08\u503c\u4f20\u9012\uff09===\");\nlet x = 5;\nmodifyPrimitive(x);\nconsole.log(`\u8c03\u7528\u540e: x = ${x}`);  \/\/ x\u4ecd\u7136\u662f5\n\nconsole.log(\"\\n=== \u5bf9\u8c61\u7c7b\u578b\uff08\u4f20\u9012\u5f15\u7528\u526f\u672c\uff09===\");\nlet arr = &#91;1, 2, 3];\nmodifyArray(arr);\nconsole.log(`\u8c03\u7528\u540e: arr = &#91;${arr}]`);  \/\/ arr\u88ab\u4fee\u6539\n\nconsole.log(\"\\n=== \u5b57\u7b26\u4e32\uff08\u4e0d\u53ef\u53d8\uff09===\");\nlet str = \"hello\";\nmodifyString(str);\nconsole.log(`\u8c03\u7528\u540e: str = \"${str}\"`);  \/\/ str\u4ecd\u7136\u662f\"hello\"\n\nconsole.log(\"\\n=== \u91cd\u65b0\u7ed1\u5b9a\u5f15\u7528 ===\");\nlet obj = { value: 10 };\nreassignObject(obj);\nconsole.log(`\u8c03\u7528\u540e: obj.value = ${obj.value}`);  \/\/ obj.value\u4ecd\u7136\u662f10\n\n\/\/ \u51fd\u6570\u5b9a\u4e49\nfunction modifyPrimitive(num) {\n    num = 100;  \/\/ \u53ea\u4fee\u6539\u526f\u672c\n}\n\nfunction modifyArray(array) {\n    array.push(100);  \/\/ \u901a\u8fc7\u5f15\u7528\u526f\u672c\u4fee\u6539\u539f\u6570\u7ec4\n}\n\nfunction modifyString(s) {\n    s = s + \" world\";  \/\/ \u521b\u5efa\u65b0\u5b57\u7b26\u4e32\n}\n\nfunction reassignObject(obj) {\n    obj = { value: 999 };  \/\/ \u91cd\u65b0\u7ed1\u5b9a\uff0c\u4e0d\u5f71\u54cd\u539f\u59cb\u5f15\u7528\n}<\/code><\/pre>\n\n\n\n<p><strong>JavaScript\u53c2\u6570\u4f20\u9012\u603b\u7ed3\uff1a<\/strong><\/p>\n\n\n\n<ol class=\"wp-block-list\">\n<li>\u57fa\u672c\u7c7b\u578b\uff1a\u503c\u4f20\u9012\uff08\u4f20\u9012\u503c\u7684\u526f\u672c\uff09<\/li>\n\n\n\n<li>\u5bf9\u8c61\u7c7b\u578b\uff1a\u4f20\u9012\u5f15\u7528\u7684\u526f\u672c\uff08\u7c7b\u4f3cJava\uff09<\/li>\n\n\n\n<li>\u53ef\u4ee5\u901a\u8fc7\u5f15\u7528\u526f\u672c\u4fee\u6539\u5bf9\u8c61\u5185\u5bb9<\/li>\n\n\n\n<li>\u65e0\u6cd5\u4fee\u6539\u8c03\u7528\u8005\u6301\u6709\u7684\u539f\u59cb\u5f15\u7528<\/li>\n\n\n\n<li>\u5b57\u7b26\u4e32\u7b49\u4e0d\u53ef\u53d8\u5bf9\u8c61\u8868\u73b0\u7c7b\u4f3c\u503c\u4f20\u9012<\/li>\n<\/ol>\n\n\n\n<h3 class=\"wp-block-heading\">2.5 Go\uff1a\u503c\u4f20\u9012\uff0c\u4f46\u6709\u6307\u9488<\/h3>\n\n\n\n<p><strong>Go\u8bed\u8a00\u7684\u53c2\u6570\u4f20\u9012\u673a\u5236\uff1a<\/strong><br>Go\u8bed\u8a00\u4e25\u683c\u9075\u5faa\u503c\u4f20\u9012\uff0c\u4f46\u63d0\u4f9b\u4e86\u6307\u9488\u673a\u5236\u6765\u5b9e\u73b0\u7c7b\u4f3c\u5f15\u7528\u4f20\u9012\u7684\u6548\u679c\u3002<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>\/\/ Go\u4ee3\u7801\u793a\u4f8b\uff1a\npackage main\n\nimport \"fmt\"\n\n\/\/ 1. \u503c\u4f20\u9012\nfunc passByValue(x int) {\n    x = 100\n}\n\n\/\/ 2. \u6307\u9488\u4f20\u9012\uff08\u901a\u8fc7\u6307\u9488\u4fee\u6539\u539f\u59cb\u503c\uff09\nfunc passByPointer(x *int) {\n    *x = 100  \/\/ \u89e3\u5f15\u7528\u5e76\u4fee\u6539\n}\n\n\/\/ 3. \u5207\u7247\u4f20\u9012\uff08\u5207\u7247\u662f\u5f15\u7528\u7c7b\u578b\uff09\nfunc modifySlice(s &#91;]int) {\n    s&#91;0] = 999  \/\/ \u4fee\u6539\u4f1a\u5f71\u54cd\u539f\u59cb\u5207\u7247\n}\n\n\/\/ 4. \u91cd\u65b0\u5206\u914d\u5207\u7247\uff08\u4e0d\u4f1a\u5f71\u54cd\u539f\u59cb\u5207\u7247\uff09\nfunc reassignSlice(s &#91;]int) {\n    s = &#91;]int{100, 200, 300}  \/\/ \u91cd\u65b0\u5206\u914d\uff0c\u4e0d\u5f71\u54cd\u539f\u59cb\u5207\u7247\n}\n\nfunc main() {\n    fmt.Println(\"=== \u503c\u4f20\u9012 vs \u6307\u9488\u4f20\u9012 ===\")\n    a := 5\n\n    passByValue(a)\n    \/\/ a\u4ecd\u7136\u662f5\n\n    passByPointer(&amp;a)  \/\/ \u4f20\u9012\u6307\u9488\n    \/\/ a\u53d8\u4e3a100\n\n    fmt.Println(\"\\n=== \u5207\u7247\uff08\u5f15\u7528\u7c7b\u578b\uff09===\")\n    slice := &#91;]int{1, 2, 3}\n\n    modifySlice(slice)\n    \/\/ slice\u88ab\u4fee\u6539\u4e3a&#91;999, 2, 3]\n\n    reassignSlice(slice)\n    \/\/ slice\u672a\u88ab\u91cd\u65b0\u5206\u914d\u5f71\u54cd\n\n    fmt.Println(\"\\n=== \u6570\u7ec4\uff08\u503c\u7c7b\u578b\uff09===\")\n    array := &#91;3]int{1, 2, 3}  \/\/ \u6ce8\u610f\uff1a\u8fd9\u662f\u6570\u7ec4\uff0c\u4e0d\u662f\u5207\u7247\n\n    modifyArray(array)\n    \/\/ array\u672a\u88ab\u4fee\u6539\n}\n\nfunc modifyArray(arr &#91;3]int) {\n    arr&#91;0] = 999\n}<\/code><\/pre>\n\n\n\n<p><strong>Go\u53c2\u6570\u4f20\u9012\u603b\u7ed3\uff1a<\/strong><\/p>\n\n\n\n<ol class=\"wp-block-list\">\n<li>Go\u4e25\u683c\u9075\u5faa\u503c\u4f20\u9012\uff08\u6240\u6709\u53c2\u6570\u90fd\u4f20\u9012\u526f\u672c\uff09<\/li>\n\n\n\n<li>\u57fa\u672c\u7c7b\u578b\u3001\u6570\u7ec4\u3001\u7ed3\u6784\u4f53\uff1a\u4f20\u9012\u5b8c\u6574\u526f\u672c<\/li>\n\n\n\n<li>\u5207\u7247\u3001\u6620\u5c04\u3001\u901a\u9053\uff1a\u4f20\u9012\u63cf\u8ff0\u7b26\u7684\u526f\u672c\uff08\u8868\u73b0\u7c7b\u4f3c\u5f15\u7528\u4f20\u9012\uff09<\/li>\n\n\n\n<li>\u4f7f\u7528\u6307\u9488\uff08*T\uff09\u5b9e\u73b0\u7c7b\u4f3c\u5f15\u7528\u4f20\u9012\u7684\u6548\u679c<\/li>\n\n\n\n<li>\u5207\u7247\u7b49\u5f15\u7528\u7c7b\u578b\u7684\u5185\u90e8\u6307\u9488\u6307\u5411\u540c\u4e00\u5e95\u5c42\u6570\u7ec4<\/li>\n<\/ol>\n\n\n\n<h3 class=\"wp-block-heading\">2.6 \u5404\u8bed\u8a00\u5bf9\u6bd4\u603b\u7ed3<\/h3>\n\n\n\n<p><strong>\u5404\u8bed\u8a00\u53c2\u6570\u4f20\u9012\u65b9\u5f0f\u5bf9\u6bd4\uff1a<\/strong><\/p>\n\n\n\n<figure class=\"wp-block-table\"><table class=\"has-fixed-layout\"><thead><tr><th>\u8bed\u8a00<\/th><th>\u4f20\u9012\u673a\u5236<\/th><th>\u57fa\u672c\u7c7b\u578b<\/th><th>\u5bf9\u8c61\u7c7b\u578b<\/th><th>\u7279\u70b9<\/th><th>\u6027\u80fd\u8003\u8651<\/th><\/tr><\/thead><tbody><tr><td>Python<\/td><td>\u5bf9\u8c61\u5f15\u7528\u4f20\u9012<\/td><td>\u4f20\u9012\u5bf9\u8c61\u5f15\u7528\uff08\u4e0d\u53ef\u53d8\uff0c\u8868\u73b0\u7c7b\u4f3c\u503c\u4f20\u9012\uff09<\/td><td>\u4f20\u9012\u5bf9\u8c61\u5f15\u7528\uff08\u53ef\u53d8\uff0c\u8868\u73b0\u7c7b\u4f3c\u5f15\u7528\u4f20\u9012\uff09<\/td><td>\u7edf\u4e00\u7684\u5bf9\u8c61\u5f15\u7528\u6a21\u578b\uff0c\u7b80\u5355\u4f46\u6709\u65f6\u4ee4\u4eba\u56f0\u60d1<\/td><td>\u907f\u514d\u590d\u5236\u5927\u5bf9\u8c61\uff0c\u4f20\u9012\u5f15\u7528\u9ad8\u6548<\/td><\/tr><tr><td>Java<\/td><td>\u503c\u4f20\u9012\uff08\u4f20\u9012\u503c\u7684\u526f\u672c\uff09<\/td><td>\u4f20\u9012\u503c\u7684\u526f\u672c<\/td><td>\u4f20\u9012\u5bf9\u8c61\u5f15\u7528\u7684\u526f\u672c<\/td><td>\u4e25\u683c\u503c\u4f20\u9012\uff0c\u4f46\u5bf9\u8c61\u5f15\u7528\u526f\u672c\u53ef\u4ee5\u4fee\u6539\u5bf9\u8c61\u5185\u5bb9<\/td><td>\u5bf9\u8c61\u4f20\u9012\u9ad8\u6548\uff08\u53ea\u590d\u5236\u5f15\u7528\uff09\uff0c\u57fa\u672c\u7c7b\u578b\u76f4\u63a5\u590d\u5236\u503c<\/td><\/tr><tr><td>C++<\/td><td>\u652f\u6301\u503c\u4f20\u9012\u548c\u5f15\u7528\u4f20\u9012<\/td><td>\u503c\u4f20\u9012\u6216\u5f15\u7528\u4f20\u9012\uff08\u7531\u7a0b\u5e8f\u5458\u9009\u62e9\uff09<\/td><td>\u503c\u4f20\u9012\u3001\u5f15\u7528\u4f20\u9012\u6216\u6307\u9488\u4f20\u9012<\/td><td>\u63d0\u4f9b\u591a\u79cd\u4f20\u9012\u65b9\u5f0f\uff0c\u7a0b\u5e8f\u5458\u6709\u5b8c\u5168\u63a7\u5236\u6743<\/td><td>\u5f15\u7528\u4f20\u9012\u907f\u514d\u590d\u5236\uff0c\u5e38\u91cf\u5f15\u7528\u517c\u987e\u6027\u80fd\u548c\u5b89\u5168<\/td><\/tr><tr><td>JavaScript<\/td><td>\u503c\u4f20\u9012\uff08\u5bf9\u4e8e\u5bf9\u8c61\u4f20\u9012\u5f15\u7528\u526f\u672c\uff09<\/td><td>\u4f20\u9012\u503c\u7684\u526f\u672c<\/td><td>\u4f20\u9012\u5bf9\u8c61\u5f15\u7528\u7684\u526f\u672c<\/td><td>\u7c7b\u4f3cJava\uff0c\u4f46\u66f4\u52a8\u6001\u7075\u6d3b<\/td><td>\u5bf9\u8c61\u4f20\u9012\u9ad8\u6548\uff0c\u57fa\u672c\u7c7b\u578b\u76f4\u63a5\u590d\u5236<\/td><\/tr><tr><td>Go<\/td><td>\u503c\u4f20\u9012\uff08\u4e25\u683c\uff09<\/td><td>\u4f20\u9012\u503c\u7684\u526f\u672c<\/td><td>\u4f20\u9012\u503c\u7684\u526f\u672c\uff08\u5207\u7247\u7b49\u5f15\u7528\u7c7b\u578b\u4f20\u9012\u63cf\u8ff0\u7b26\u526f\u672c\uff09<\/td><td>\u4e25\u683c\u503c\u4f20\u9012\uff0c\u4f7f\u7528\u6307\u9488\u5b9e\u73b0\u5f15\u7528\u4f20\u9012\u6548\u679c<\/td><td>\u5927\u7ed3\u6784\u4f53\u4f7f\u7528\u6307\u9488\u907f\u514d\u590d\u5236\uff0c\u5207\u7247\u7b49\u5f15\u7528\u7c7b\u578b\u9ad8\u6548<\/td><\/tr><\/tbody><\/table><\/figure>\n\n\n\n<p><strong>\u6838\u5fc3\u6982\u5ff5\u7edf\u4e00\u7406\u89e3\uff1a<\/strong><br>\u5c3d\u7ba1\u4e0d\u540c\u8bed\u8a00\u7684\u672f\u8bed\u548c\u5b9e\u73b0\u7ec6\u8282\u4e0d\u540c\uff0c\u4f46\u6838\u5fc3\u6982\u5ff5\u662f\u76f8\u901a\u7684\uff1a<\/p>\n\n\n\n<ol class=\"wp-block-list\">\n<li>\u503c\u4f20\u9012\uff08Pass by Value\uff09\uff1a<\/li>\n<\/ol>\n\n\n\n<ul class=\"wp-block-list\">\n<li>\u4f20\u9012\u6570\u636e\u7684\u526f\u672c<\/li>\n\n\n\n<li>\u51fd\u6570\u5185\u4fee\u6539\u4e0d\u5f71\u54cd\u539f\u59cb\u6570\u636e<\/li>\n\n\n\n<li>\u9002\u7528\u4e8e\u57fa\u672c\u6570\u636e\u7c7b\u578b\u6216\u9700\u8981\u4fdd\u62a4\u539f\u59cb\u6570\u636e\u7684\u573a\u666f<\/li>\n<\/ul>\n\n\n\n<ol class=\"wp-block-list\">\n<li>\u5f15\u7528\u4f20\u9012\uff08Pass by Reference\uff09\uff1a<\/li>\n<\/ol>\n\n\n\n<ul class=\"wp-block-list\">\n<li>\u4f20\u9012\u6570\u636e\u7684\u5f15\u7528\uff08\u5730\u5740\uff09<\/li>\n\n\n\n<li>\u51fd\u6570\u5185\u4fee\u6539\u4f1a\u5f71\u54cd\u539f\u59cb\u6570\u636e<\/li>\n\n\n\n<li>\u9002\u7528\u4e8e\u5927\u5bf9\u8c61\u6216\u9700\u8981\u4fee\u6539\u539f\u59cb\u6570\u636e\u7684\u573a\u666f<\/li>\n<\/ul>\n\n\n\n<ol class=\"wp-block-list\">\n<li>\u5bf9\u8c61\u5f15\u7528\u4f20\u9012\uff08Python\u98ce\u683c\uff09\uff1a<\/li>\n<\/ol>\n\n\n\n<ul class=\"wp-block-list\">\n<li>\u4f20\u9012\u5bf9\u8c61\u7684\u5f15\u7528<\/li>\n\n\n\n<li>\u5bf9\u4e8e\u53ef\u53d8\u5bf9\u8c61\uff0c\u53ef\u4ee5\u4fee\u6539\u5185\u5bb9<\/li>\n\n\n\n<li>\u5bf9\u4e8e\u4e0d\u53ef\u53d8\u5bf9\u8c61\uff0c\u4e0d\u80fd\u4fee\u6539\uff08\u8868\u73b0\u7c7b\u4f3c\u503c\u4f20\u9012\uff09<\/li>\n<\/ul>\n\n\n\n<ol class=\"wp-block-list\">\n<li>\u5f15\u7528\u526f\u672c\u4f20\u9012\uff08Java\/JavaScript\u98ce\u683c\uff09\uff1a<\/li>\n<\/ol>\n\n\n\n<ul class=\"wp-block-list\">\n<li>\u4f20\u9012\u5bf9\u8c61\u5f15\u7528\u7684\u526f\u672c<\/li>\n\n\n\n<li>\u53ef\u4ee5\u901a\u8fc7\u526f\u672c\u4fee\u6539\u5bf9\u8c61\u5185\u5bb9<\/li>\n\n\n\n<li>\u4f46\u4e0d\u80fd\u4fee\u6539\u8c03\u7528\u8005\u6301\u6709\u7684\u539f\u59cb\u5f15\u7528<\/li>\n<\/ul>\n\n\n\n<p><strong>\u5173\u952e\u6d1e\u5bdf\uff1a<\/strong><\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>\u6ca1\u6709\u7edd\u5bf9\u7684&#8221;\u597d&#8221;\u6216&#8221;\u574f&#8221;\uff0c\u53ea\u6709\u9002\u5408\u7279\u5b9a\u573a\u666f\u7684\u9009\u62e9<\/li>\n\n\n\n<li>\u7406\u89e3\u8bed\u8a00\u7684\u4f20\u9012\u673a\u5236\u662f\u907f\u514dbug\u7684\u5173\u952e<\/li>\n\n\n\n<li>\u5728\u8bbe\u8ba1\u548c\u5b9e\u73b0API\u65f6\uff0c\u8981\u8003\u8651\u53c2\u6570\u4f20\u9012\u7684\u8bed\u4e49<\/li>\n<\/ul>\n\n\n\n<h2 class=\"wp-block-heading\">\u7b2c\u4e09\u90e8\u5206\uff1a\u6df1\u6d45\u62f7\u8d1d\u4e0e\u53c2\u6570\u4f20\u9012<\/h2>\n\n\n\n<h3 class=\"wp-block-heading\">3.1 \u6d45\u62f7\u8d1d vs \u6df1\u62f7\u8d1d<\/h3>\n\n\n\n<p><strong>\u4ec0\u4e48\u662f\u6d45\u62f7\u8d1d\uff08Shallow Copy\uff09\uff1f<\/strong><br>\u6d45\u62f7\u8d1d\u521b\u5efa\u4e00\u4e2a\u65b0\u5bf9\u8c61\uff0c\u4f46\u53ea\u590d\u5236\u539f\u5bf9\u8c61\u7684\u7b2c\u4e00\u5c42\u5185\u5bb9\u3002\u5bf9\u4e8e\u5d4c\u5957\u5bf9\u8c61\uff08\u5982\u5217\u8868\u4e2d\u7684\u5217\u8868\u3001\u5b57\u5178\u4e2d\u7684\u5b57\u5178\uff09\uff0c\u6d45\u62f7\u8d1d\u53ea\u590d\u5236\u5f15\u7528\uff0c\u4e0d\u590d\u5236\u5b9e\u9645\u5185\u5bb9\u3002<\/p>\n\n\n\n<p><strong>\u6d45\u62f7\u8d1d\u7684\u7279\u70b9\uff1a<\/strong><\/p>\n\n\n\n<ol class=\"wp-block-list\">\n<li>\u590d\u5236\u9876\u5c42\u5bf9\u8c61<\/li>\n\n\n\n<li>\u5d4c\u5957\u5bf9\u8c61\u53ea\u590d\u5236\u5f15\u7528\uff08\u5171\u4eab\uff09<\/li>\n\n\n\n<li>\u4fee\u6539\u5d4c\u5957\u5bf9\u8c61\u4f1a\u5f71\u54cd\u539f\u5bf9\u8c61<\/li>\n\n\n\n<li>\u6027\u80fd\u8f83\u9ad8\uff08\u4e0d\u590d\u5236\u5d4c\u5957\u5185\u5bb9\uff09<\/li>\n<\/ol>\n\n\n\n<p><strong>\u4ec0\u4e48\u662f\u6df1\u62f7\u8d1d\uff08Deep Copy\uff09\uff1f<\/strong><br>\u6df1\u62f7\u8d1d\u521b\u5efa\u4e00\u4e2a\u65b0\u5bf9\u8c61\uff0c\u5e76\u9012\u5f52\u590d\u5236\u6240\u6709\u5d4c\u5957\u5bf9\u8c61\u7684\u5185\u5bb9\u3002\u6df1\u62f7\u8d1d\u5b8c\u5168\u72ec\u7acb\u4e8e\u539f\u5bf9\u8c61\uff0c\u4fee\u6539\u4e0d\u4f1a\u76f8\u4e92\u5f71\u54cd\u3002<\/p>\n\n\n\n<p><strong>\u6df1\u62f7\u8d1d\u7684\u7279\u70b9\uff1a<\/strong><\/p>\n\n\n\n<ol class=\"wp-block-list\">\n<li>\u590d\u5236\u6240\u6709\u5c42\u6b21\u7684\u5bf9\u8c61<\/li>\n\n\n\n<li>\u5d4c\u5957\u5bf9\u8c61\u4e5f\u88ab\u590d\u5236\uff08\u4e0d\u5171\u4eab\uff09<\/li>\n\n\n\n<li>\u4fee\u6539\u4e0d\u4f1a\u5f71\u54cd\u539f\u5bf9\u8c61<\/li>\n\n\n\n<li>\u6027\u80fd\u8f83\u4f4e\uff08\u590d\u5236\u6240\u6709\u5185\u5bb9\uff09<\/li>\n\n\n\n<li>\u53ef\u80fd\u9047\u5230\u5faa\u73af\u5f15\u7528\u95ee\u9898<\/li>\n<\/ol>\n\n\n\n<pre class=\"wp-block-code\"><code># ============================================================================\n# \u6d45\u62f7\u8d1d vs \u6df1\u62f7\u8d1d\u793a\u4f8b\n# ============================================================================\n\nimport copy\n\ndef demonstrate_copy():\n    \"\"\"\u6f14\u793a\u6df1\u6d45\u62f7\u8d1d\u7684\u533a\u522b\"\"\"\n\n    print(\"\u793a\u4f8b\uff1a\u5d4c\u5957\u5217\u8868\u7684\u62f7\u8d1d\")\n\n    # \u539f\u59cb\u5d4c\u5957\u5217\u8868\n    original = &#91;\n        &#91;1, 2, 3],\n        {\"name\": \"Alice\", \"scores\": &#91;85, 90, 95]},\n        \"hello\"\n    ]\n\n    print(\"1. \u8d4b\u503c\uff08\u521b\u5efa\u65b0\u5f15\u7528\uff09:\")\n    assignment = original  # \u53ea\u662f\u521b\u5efa\u65b0\u5f15\u7528\n    print(f\"   \u8d4b\u503c\u540e: assignment is original = {assignment is original}\")\n\n    print(\"\\n2. \u6d45\u62f7\u8d1d:\")\n    shallow_copy = copy.copy(original)  # \u6216 original.copy() \u6216 list(original)\n    print(f\"   \u6d45\u62f7\u8d1d\u540e: shallow_copy is original = {shallow_copy is original}\")\n\n    # \u4fee\u6539\u6d45\u62f7\u8d1d\u7684\u5d4c\u5957\u5bf9\u8c61\n    shallow_copy&#91;0].append(4)\n    shallow_copy&#91;1]&#91;\"scores\"].append(100)\n    print(f\"   \u4fee\u6539\u6d45\u62f7\u8d1d\u540e:\")\n    print(f\"     \u539f\u59cb\u5bf9\u8c61\u4e5f\u88ab\u4fee\u6539\u4e86\uff01\")\n\n    print(\"\\n3. \u6df1\u62f7\u8d1d:\")\n    # \u6062\u590d\u539f\u59cb\u6570\u636e\n    original&#91;0] = &#91;1, 2, 3]\n    original&#91;1]&#91;\"scores\"] = &#91;85, 90, 95]\n\n    deep_copy = copy.deepcopy(original)\n    print(f\"   \u6df1\u62f7\u8d1d\u540e: deep_copy is original = {deep_copy is original}\")\n\n    # \u4fee\u6539\u6df1\u62f7\u8d1d\u7684\u5d4c\u5957\u5bf9\u8c61\n    deep_copy&#91;0].append(999)\n    deep_copy&#91;1]&#91;\"scores\"].append(777)\n    print(f\"   \u4fee\u6539\u6df1\u62f7\u8d1d\u540e:\")\n    print(f\"     \u539f\u59cb\u5bf9\u8c61\u672a\u88ab\u4fee\u6539\uff01\")\n\ndemonstrate_copy()<\/code><\/pre>\n\n\n\n<p><strong>\u6df1\u6d45\u62f7\u8d1d\u7684\u5e38\u89c1\u65b9\u6cd5\uff1a<\/strong><\/p>\n\n\n\n<p>Python:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>\u6d45\u62f7\u8d1d: copy.copy(), list.copy(), \u5207\u7247\u64cd\u4f5c, dict.copy()<\/li>\n\n\n\n<li>\u6df1\u62f7\u8d1d: copy.deepcopy(), \u624b\u52a8\u9012\u5f52\u590d\u5236, \u5e8f\u5217\u5316\/\u53cd\u5e8f\u5217\u5316<\/li>\n<\/ul>\n\n\n\n<p>JavaScript:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>\u6d45\u62f7\u8d1d: \u6269\u5c55\u8fd0\u7b97\u7b26 {\u2026obj}, Object.assign(), Array.slice()<\/li>\n\n\n\n<li>\u6df1\u62f7\u8d1d: JSON.parse(JSON.stringify(obj)), Lodash\u7684_.cloneDeep()<\/li>\n<\/ul>\n\n\n\n<p>Java:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>\u6d45\u62f7\u8d1d: clone()\u65b9\u6cd5, \u590d\u5236\u6784\u9020\u51fd\u6570<\/li>\n\n\n\n<li>\u6df1\u62f7\u8d1d: \u5e8f\u5217\u5316\/\u53cd\u5e8f\u5217\u5316, \u624b\u52a8\u9012\u5f52\u590d\u5236<\/li>\n<\/ul>\n\n\n\n<p><strong>\u4f55\u65f6\u4f7f\u7528\u6df1\u6d45\u62f7\u8d1d\uff1f<\/strong><\/p>\n\n\n\n<p>\u6d45\u62f7\u8d1d\u9002\u7528\u573a\u666f\uff1a<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>\u5bf9\u8c61\u7ed3\u6784\u7b80\u5355\uff0c\u6ca1\u6709\u5d4c\u5957\u6216\u5d4c\u5957\u4e0d\u53ef\u53d8<\/li>\n\n\n\n<li>\u53ea\u9700\u8981\u590d\u5236\u9876\u5c42\u7ed3\u6784<\/li>\n\n\n\n<li>\u6027\u80fd\u8981\u6c42\u9ad8\uff0c\u6570\u636e\u91cf\u5927<\/li>\n\n\n\n<li>\u5141\u8bb8\u5171\u4eab\u5d4c\u5957\u5bf9\u8c61\uff08\u5982\u914d\u7f6e\u4fe1\u606f\uff09<\/li>\n<\/ul>\n\n\n\n<p>\u6df1\u62f7\u8d1d\u9002\u7528\u573a\u666f\uff1a<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>\u5bf9\u8c61\u7ed3\u6784\u590d\u6742\uff0c\u6709\u591a\u5c42\u5d4c\u5957<\/li>\n\n\n\n<li>\u9700\u8981\u5b8c\u5168\u72ec\u7acb\u7684\u526f\u672c<\/li>\n\n\n\n<li>\u4fee\u6539\u526f\u672c\u65f6\u4e0d\u80fd\u5f71\u54cd\u539f\u59cb\u6570\u636e<\/li>\n\n\n\n<li>\u7ebf\u7a0b\u5b89\u5168\u8981\u6c42\uff08\u907f\u514d\u5171\u4eab\u72b6\u6001\uff09<\/li>\n<\/ul>\n\n\n\n<p>\u6ce8\u610f\u4e8b\u9879\uff1a<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>\u6df1\u62f7\u8d1d\u53ef\u80fd\u9047\u5230\u5faa\u73af\u5f15\u7528\u95ee\u9898<\/li>\n\n\n\n<li>\u6df1\u62f7\u8d1d\u53ef\u80fd\u590d\u5236\u4e0d\u9700\u8981\u7684\u6570\u636e<\/li>\n\n\n\n<li>\u6df1\u62f7\u8d1d\u6027\u80fd\u5f00\u9500\u5927\uff0c\u7279\u522b\u662f\u5927\u5bf9\u8c61<\/li>\n\n\n\n<li>\u67d0\u4e9b\u5bf9\u8c61\u53ef\u80fd\u65e0\u6cd5\u6df1\u62f7\u8d1d\uff08\u5982\u6587\u4ef6\u53e5\u67c4\u3001\u6570\u636e\u5e93\u8fde\u63a5\uff09<\/li>\n<\/ul>\n\n\n\n<h3 class=\"wp-block-heading\">3.2 \u53c2\u6570\u4f20\u9012\u4e2d\u7684\u62f7\u8d1d\u95ee\u9898<\/h3>\n\n\n\n<p><strong>\u5e38\u89c1\u95ee\u9898\uff1a\u610f\u5916\u7684\u6570\u636e\u4fee\u6539<\/strong><\/p>\n\n\n\n<pre class=\"wp-block-code\"><code># ============================================================================\n# \u53c2\u6570\u4f20\u9012\u4e2d\u7684\u62f7\u8d1d\u95ee\u9898\n# ============================================================================\n\ndef demonstrate_unexpected_modification():\n    \"\"\"\u6f14\u793a\u53c2\u6570\u4f20\u9012\u4e2d\u610f\u5916\u7684\u6570\u636e\u4fee\u6539\"\"\"\n\n    print(\"\u573a\u666f1\uff1a\u51fd\u6570\u610f\u5916\u4fee\u6539\u4e86\u8c03\u7528\u8005\u7684\u6570\u636e\")\n\n    def process_data(data):\n        \"\"\"\u5904\u7406\u6570\u636e\uff0c\u4f46\u610f\u5916\u4fee\u6539\u4e86\u539f\u59cb\u6570\u636e\"\"\"\n        data.sort()  # \u539f\u5730\u6392\u5e8f\uff0c\u4fee\u6539\u4e86\u539f\u59cb\u5217\u8868\n        return sum(data)\n\n    original_scores = &#91;85, 92, 78, 90]\n    total = process_data(original_scores)\n    # original_scores \u88ab\u6392\u5e8f\u4e86\n\n    print(\"\u573a\u666f2\uff1a\u9ed8\u8ba4\u53c2\u6570\u7684\u53ef\u53d8\u9677\u9631\")\n\n    def add_item(item, items=&#91;]):\n        \"\"\"\u6709\u95ee\u9898\u7684\u9ed8\u8ba4\u53c2\u6570\"\"\"\n        items.append(item)\n        return items\n\n    result1 = add_item(\"apple\")\n    result2 = add_item(\"banana\")\n    # result2 \u5305\u542b\u4e86apple\uff01\u56e0\u4e3a\u4f7f\u7528\u4e86\u540c\u4e00\u4e2a\u9ed8\u8ba4\u5217\u8868\n\n    print(\"\u573a\u666f3\uff1a\u89e3\u51b3\u65b9\u6848\")\n\n    def safe_process_data(data):\n        \"\"\"\u5b89\u5168\u7684\u5904\u7406\u51fd\u6570\"\"\"\n        # \u521b\u5efa\u526f\u672c\u8fdb\u884c\u5904\u7406\n        data_copy = data.copy()  # \u6d45\u62f7\u8d1d\uff08\u5982\u679cdata\u662f\u7b80\u5355\u5217\u8868\uff09\n        data_copy.sort()\n        return sum(data_copy), data_copy\n\n    def safe_add_item(item, items=None):\n        \"\"\"\u5b89\u5168\u7684\u9ed8\u8ba4\u53c2\u6570\"\"\"\n        if items is None:\n            items = &#91;]  # \u6bcf\u6b21\u521b\u5efa\u65b0\u5217\u8868\n        items.append(item)\n        return items\n\ndemonstrate_unexpected_modification()<\/code><\/pre>\n\n\n\n<p><strong>\u9632\u5fa1\u6027\u7f16\u7a0b\u6280\u5de7\uff1a<\/strong><\/p>\n\n\n\n<ol class=\"wp-block-list\">\n<li>\u6587\u6863\u5316\u53c2\u6570\u884c\u4e3a<\/li>\n<\/ol>\n\n\n\n<ul class=\"wp-block-list\">\n<li>\u660e\u786e\u8bf4\u660e\u51fd\u6570\u662f\u5426\u4f1a\u4fee\u6539\u8f93\u5165\u53c2\u6570<\/li>\n\n\n\n<li>\u597d\u5904\uff1a\u8c03\u7528\u8005\u77e5\u9053\u53c2\u6570\u4f1a\u88ab\u4fee\u6539<\/li>\n<\/ul>\n\n\n\n<ol class=\"wp-block-list\">\n<li>\u4f7f\u7528\u4e0d\u53ef\u53d8\u53c2\u6570<\/li>\n<\/ol>\n\n\n\n<ul class=\"wp-block-list\">\n<li>\u8bbe\u8ba1\u51fd\u6570\u63a5\u53d7\u4e0d\u53ef\u53d8\u53c2\u6570\uff0c\u6216\u8fd4\u56de\u65b0\u5bf9\u8c61<\/li>\n\n\n\n<li>\u597d\u5904\uff1a\u5b8c\u5168\u907f\u514d\u610f\u5916\u4fee\u6539<\/li>\n<\/ul>\n\n\n\n<ol class=\"wp-block-list\">\n<li>\u663e\u5f0f\u62f7\u8d1d<\/li>\n<\/ol>\n\n\n\n<ul class=\"wp-block-list\">\n<li>\u5728\u51fd\u6570\u5185\u90e8\u521b\u5efa\u53c2\u6570\u7684\u526f\u672c<\/li>\n\n\n\n<li>\u597d\u5904\uff1a\u4fdd\u62a4\u539f\u59cb\u6570\u636e\uff0c\u51fd\u6570\u81ea\u5305\u542b<\/li>\n<\/ul>\n\n\n\n<ol class=\"wp-block-list\">\n<li>\u4f7f\u7528\u4e0d\u53ef\u53d8\u9ed8\u8ba4\u503c<\/li>\n<\/ol>\n\n\n\n<ul class=\"wp-block-list\">\n<li>\u9ed8\u8ba4\u53c2\u6570\u4f7f\u7528None\uff0c\u5728\u51fd\u6570\u5185\u521b\u5efa\u53ef\u53d8\u5bf9\u8c61<\/li>\n\n\n\n<li>\u597d\u5904\uff1a\u907f\u514d\u9ed8\u8ba4\u53c2\u6570\u5171\u4eab\u95ee\u9898<\/li>\n<\/ul>\n\n\n\n<p><strong>\u53c2\u6570\u4f20\u9012\u6700\u4f73\u5b9e\u8df5\uff1a<\/strong><\/p>\n\n\n\n<ol class=\"wp-block-list\">\n<li>\u660e\u786e\u610f\u56fe\uff1a\u8bbe\u8ba1\u51fd\u6570\u65f6\u8981\u660e\u786e\u662f\u5426\u4f1a\u4fee\u6539\u8f93\u5165\u53c2\u6570<\/li>\n\n\n\n<li>\u9075\u5faa\u6700\u5c0f\u60ca\u8bb6\u539f\u5219\uff1a\u51fd\u6570\u884c\u4e3a\u5e94\u8be5\u7b26\u5408\u8c03\u7528\u8005\u7684\u9884\u671f<\/li>\n\n\n\n<li>\u4f7f\u7528\u7c7b\u578b\u63d0\u793a\uff1a\u660e\u786e\u53c2\u6570\u7c7b\u578b\u548c\u8fd4\u56de\u7c7b\u578b<\/li>\n\n\n\n<li>\u63d0\u4f9b\u4e24\u79cd\u7248\u672c\uff1a\u8003\u8651\u63d0\u4f9b\u4fee\u6539\u7248\u548c\u4e0d\u4fee\u6539\u7248\u51fd\u6570<\/li>\n\n\n\n<li>\u6d4b\u8bd5\u8fb9\u754c\u60c5\u51b5\uff1a\u6d4b\u8bd5\u51fd\u6570\u5728\u4e0d\u540c\u8f93\u5165\u4e0b\u7684\u884c\u4e3a<\/li>\n\n\n\n<li>\u8003\u8651\u6027\u80fd\uff1a\u5bf9\u4e8e\u5927\u5bf9\u8c61\uff0c\u907f\u514d\u4e0d\u5fc5\u8981\u7684\u6df1\u62f7\u8d1d<\/li>\n\n\n\n<li>\u6587\u6863\u5316\u526f\u4f5c\u7528\uff1a\u5728\u6587\u6863\u4e2d\u8bf4\u660e\u51fd\u6570\u7684\u6240\u6709\u526f\u4f5c\u7528<\/li>\n\n\n\n<li>\u4f7f\u7528\u4e0d\u53ef\u53d8\u6570\u636e\u7ed3\u6784\uff1a\u5c3d\u53ef\u80fd\u4f7f\u7528\u5143\u7ec4\u3001frozenset\u7b49\u4e0d\u53ef\u53d8\u7c7b\u578b<\/li>\n<\/ol>\n\n\n\n<h2 class=\"wp-block-heading\">\u7b2c\u56db\u90e8\u5206\uff1a\u6027\u80fd\u5206\u6790\u4e0e\u4f18\u5316<\/h2>\n\n\n\n<h3 class=\"wp-block-heading\">4.1 \u6027\u80fd\u5f71\u54cd\u5206\u6790<\/h3>\n\n\n\n<p><strong>\u503c\u4f20\u9012\u4e0e\u5f15\u7528\u4f20\u9012\u7684\u6027\u80fd\u5f71\u54cd\uff1a<\/strong><\/p>\n\n\n\n<pre class=\"wp-block-code\"><code># ============================================================================\n# \u503c\u4f20\u9012\u4e0e\u5f15\u7528\u4f20\u9012\u7684\u6027\u80fd\u5f71\u54cd\n# ============================================================================\n\nimport time\nimport sys\nfrom typing import List, Dict\n\ndef performance_analysis():\n    \"\"\"\u5206\u6790\u4e0d\u540c\u4f20\u9012\u65b9\u5f0f\u7684\u6027\u80fd\u5dee\u5f02\"\"\"\n\n    print(\"\u6027\u80fd\u6d4b\u8bd5\uff1a\u4e0d\u540c\u5927\u5c0f\u5bf9\u8c61\u7684\u4f20\u9012\u5f00\u9500\")\n\n    # \u521b\u5efa\u4e0d\u540c\u5927\u5c0f\u7684\u6570\u636e\u7ed3\u6784\n    small_list = list(range(100))  # 100\u4e2a\u5143\u7d20\n    medium_list = list(range(10000))  # 10,000\u4e2a\u5143\u7d20\n    large_list = list(range(1000000))  # 1,000,000\u4e2a\u5143\u7d20\n\n    # \u6d4b\u8bd5\u51fd\u6570\n    def process_by_value(data: List&#91;int]) -&gt; int:\n        \"\"\"\u503c\u4f20\u9012\u98ce\u683c\uff08\u521b\u5efa\u526f\u672c\uff09\"\"\"\n        data_copy = data.copy()  # \u590d\u5236\u6570\u636e\n        return sum(data_copy)\n\n    def process_by_reference(data: List&#91;int]) -&gt; int:\n        \"\"\"\u5f15\u7528\u4f20\u9012\u98ce\u683c\uff08\u4e0d\u521b\u5efa\u526f\u672c\uff09\"\"\"\n        return sum(data)  # \u76f4\u63a5\u4f7f\u7528\n\n    # \u6027\u80fd\u6d4b\u8bd5\u51fd\u6570\n    def measure_time(func, data, iterations=100):\n        \"\"\"\u6d4b\u91cf\u51fd\u6570\u6267\u884c\u65f6\u95f4\"\"\"\n        start = time.perf_counter()\n        for _ in range(iterations):\n            result = func(data)\n        end = time.perf_counter()\n        elapsed = (end - start) * 1000  # \u8f6c\u6362\u4e3a\u6beb\u79d2\n        return elapsed, result\n\n    print(\"\u6d4b\u8bd51\uff1a\u5217\u8868\u4f20\u9012\u6027\u80fd\")\n    test_cases = &#91;\n        (\"\u5c0f\u5217\u8868 (100\u5143\u7d20)\", small_list, 1000),\n        (\"\u4e2d\u5217\u8868 (10K\u5143\u7d20)\", medium_list, 100),\n        (\"\u5927\u5217\u8868 (1M\u5143\u7d20)\", large_list, 10)\n    ]\n\n    for name, data, iterations in test_cases:\n        print(f\"\\n{name}:\")\n\n        # \u503c\u4f20\u9012\uff08\u590d\u5236\uff09\n        time_val, _ = measure_time(process_by_value, data, iterations)\n        print(f\"  \u503c\u4f20\u9012\uff08\u590d\u5236\uff09: {time_val:.2f}ms\")\n\n        # \u5f15\u7528\u4f20\u9012\uff08\u4e0d\u590d\u5236\uff09\n        time_ref, _ = measure_time(process_by_reference, data, iterations)\n        print(f\"  \u5f15\u7528\u4f20\u9012: {time_ref:.2f}ms\")\n\n        # \u6027\u80fd\u5dee\u5f02\n        if time_val &gt; 0 and time_ref &gt; 0:\n            ratio = time_val \/ time_ref\n            print(f\"  \u6027\u80fd\u5dee\u5f02: \u503c\u4f20\u9012\u662f\u5f15\u7528\u4f20\u9012\u7684 {ratio:.1f} \u500d\")\n\n        # \u5185\u5b58\u4f7f\u7528\n        print(f\"  \u5217\u8868\u5927\u5c0f: {sys.getsizeof(data) \/ 1024:.2f} KB\")\n\nperformance_analysis()<\/code><\/pre>\n\n\n\n<p><strong>\u6027\u80fd\u5206\u6790\u7ed3\u8bba\uff1a<\/strong><\/p>\n\n\n\n<ol class=\"wp-block-list\">\n<li>\u5bf9\u4e8e\u5927\u5bf9\u8c61\uff0c\u5f15\u7528\u4f20\u9012\u6bd4\u503c\u4f20\u9012\uff08\u590d\u5236\uff09\u5feb\u5f97\u591a<\/li>\n\n\n\n<li>\u590d\u5236\u64cd\u4f5c\u7684\u6027\u80fd\u5f00\u9500\u4e0e\u5bf9\u8c61\u5927\u5c0f\u6210\u6b63\u6bd4<\/li>\n\n\n\n<li>\u5b57\u7b26\u4e32\u7b49\u4e0d\u53ef\u53d8\u5bf9\u8c61\u7684\u4f20\u9012\u5f88\u9ad8\u6548\uff08Python\u4f1a\u4f18\u5316\uff09<\/li>\n\n\n\n<li>\u5b57\u5178\u590d\u5236\u6bd4\u5217\u8868\u590d\u5236\u5f00\u9500\u66f4\u5927<\/li>\n\n\n\n<li>\u5728\u6027\u80fd\u5173\u952e\u8def\u5f84\u4e0a\uff0c\u907f\u514d\u4e0d\u5fc5\u8981\u7684\u6570\u636e\u590d\u5236<\/li>\n<\/ol>\n\n\n\n<h3 class=\"wp-block-heading\">4.2 \u5185\u5b58\u4f7f\u7528\u5206\u6790<\/h3>\n\n\n\n<pre class=\"wp-block-code\"><code># ============================================================================\n# \u5185\u5b58\u4f7f\u7528\u5206\u6790\n# ============================================================================\n\nimport tracemalloc\n\ndef memory_analysis():\n    \"\"\"\u5206\u6790\u4e0d\u540c\u4f20\u9012\u65b9\u5f0f\u7684\u5185\u5b58\u4f7f\u7528\"\"\"\n\n    print(\"\u5185\u5b58\u6d4b\u8bd5\uff1a\u503c\u4f20\u9012 vs \u5f15\u7528\u4f20\u9012\u7684\u5185\u5b58\u5f00\u9500\")\n\n    # \u521b\u5efa\u5927\u5bf9\u8c61\n    large_data = list(range(1000000))  # 1,000,000\u4e2a\u6574\u6570\n\n    print(f\"\u539f\u59cb\u6570\u636e\u5927\u5c0f: {sys.getsizeof(large_data) \/ (1024*1024):.2f} MB\")\n\n    def test_memory_by_value():\n        \"\"\"\u6d4b\u8bd5\u503c\u4f20\u9012\u7684\u5185\u5b58\u4f7f\u7528\"\"\"\n        tracemalloc.start()\n\n        # \u503c\u4f20\u9012\uff1a\u521b\u5efa\u526f\u672c\n        data_copy = large_data.copy()\n        total = sum(data_copy)\n\n        current, peak = tracemalloc.get_traced_memory()\n        tracemalloc.stop()\n        return current \/ 1024, peak \/ 1024, total\n\n    def test_memory_by_reference():\n        \"\"\"\u6d4b\u8bd5\u5f15\u7528\u4f20\u9012\u7684\u5185\u5b58\u4f7f\u7528\"\"\"\n        tracemalloc.start()\n\n        # \u5f15\u7528\u4f20\u9012\uff1a\u4e0d\u521b\u5efa\u526f\u672c\n        data_ref = large_data  # \u53ea\u662f\u5f15\u7528\n        total = sum(data_ref)\n\n        current, peak = tracemalloc.get_traced_memory()\n        tracemalloc.stop()\n        return current \/ 1024, peak \/ 1024, total\n\n    print(\"\\n\u6d4b\u8bd51\uff1a\u503c\u4f20\u9012\uff08\u590d\u5236\uff09\u7684\u5185\u5b58\u4f7f\u7528\")\n    current_val, peak_val, total_val = test_memory_by_value()\n    print(f\"  \u5cf0\u503c\u5185\u5b58: {peak_val:.2f} KB\")\n\n    print(\"\\n\u6d4b\u8bd52\uff1a\u5f15\u7528\u4f20\u9012\u7684\u5185\u5b58\u4f7f\u7528\")\n    current_ref, peak_ref, total_ref = test_memory_by_reference()\n    print(f\"  \u5cf0\u503c\u5185\u5b58: {peak_ref:.2f} KB\")\n\n    print(\"\\n\u6d4b\u8bd53\uff1a\u5d4c\u5957\u5bf9\u8c61\u7684\u6df1\u6d45\u62f7\u8d1d\u5185\u5b58\u4f7f\u7528\")\n\n    # \u521b\u5efa\u5d4c\u5957\u7ed3\u6784\n    nested_data = {\n        \"users\": &#91;\n            {\"id\": i, \"data\": list(range(1000))}\n            for i in range(100)  # 100\u4e2a\u7528\u6237\uff0c\u6bcf\u4e2a\u7528\u6237\u67091000\u4e2a\u6570\u636e\u70b9\n        ]\n    }\n\n    def test_shallow_copy():\n        \"\"\"\u6d4b\u8bd5\u6d45\u62f7\u8d1d\u7684\u5185\u5b58\u4f7f\u7528\"\"\"\n        tracemalloc.start()\n        shallow_copy = nested_data.copy()\n        shallow_copy&#91;\"timestamp\"] = \"2024-01-01\"\n        current, peak = tracemalloc.get_traced_memory()\n        tracemalloc.stop()\n        return current \/ 1024, peak \/ 1024\n\n    def test_deep_copy():\n        \"\"\"\u6d4b\u8bd5\u6df1\u62f7\u8d1d\u7684\u5185\u5b58\u4f7f\u7528\"\"\"\n        tracemalloc.start()\n        import copy\n        deep_copy = copy.deepcopy(nested_data)\n        deep_copy&#91;\"users\"]&#91;0]&#91;\"data\"].append(9999)\n        current, peak = tracemalloc.get_traced_memory()\n        tracemalloc.stop()\n        return current \/ 1024, peak \/ 1024\n\n    current_shallow, peak_shallow = test_shallow_copy()\n    current_deep, peak_deep = test_deep_copy()\n\n    print(f\"  \u6d45\u62f7\u8d1d - \u5cf0\u503c: {peak_shallow:.2f} KB\")\n    print(f\"  \u6df1\u62f7\u8d1d - \u5cf0\u503c: {peak_deep:.2f} KB\")\n    print(f\"  \u5185\u5b58\u4f7f\u7528\u6bd4: \u6df1\u62f7\u8d1d\/\u6d45\u62f7\u8d1d = {current_deep\/current_shallow:.1f}\u500d\")\n\nmemory_analysis()<\/code><\/pre>\n\n\n\n<p><strong>\u5185\u5b58\u4f7f\u7528\u4f18\u5316\u7b56\u7565\uff1a<\/strong><\/p>\n\n\n\n<ol class=\"wp-block-list\">\n<li>\u4f7f\u7528\u5f15\u7528\u4f20\u9012<\/li>\n<\/ol>\n\n\n\n<ul class=\"wp-block-list\">\n<li>\u9002\u7528\u573a\u666f\uff1a\u5927\u5bf9\u8c61\u4f5c\u4e3a\u51fd\u6570\u53c2\u6570<\/li>\n\n\n\n<li>\u5b9e\u73b0\u65b9\u5f0f\uff1a\u76f4\u63a5\u4f20\u9012\u5bf9\u8c61\uff0c\u4e0d\u590d\u5236<\/li>\n\n\n\n<li>\u6ce8\u610f\u4e8b\u9879\uff1a\u6ce8\u610f\u51fd\u6570\u662f\u5426\u4f1a\u4fee\u6539\u539f\u59cb\u6570\u636e<\/li>\n\n\n\n<li>\u5185\u5b58\u8282\u7701\uff1a\u663e\u8457\u51cf\u5c11\u5185\u5b58\u4f7f\u7528<\/li>\n<\/ul>\n\n\n\n<ol class=\"wp-block-list\">\n<li>\u4f7f\u7528\u5207\u7247\u6216\u89c6\u56fe<\/li>\n<\/ol>\n\n\n\n<ul class=\"wp-block-list\">\n<li>\u9002\u7528\u573a\u666f\uff1a\u53ea\u9700\u8981\u5904\u7406\u90e8\u5206\u6570\u636e<\/li>\n\n\n\n<li>\u5b9e\u73b0\u65b9\u5f0f\uff1a\u4f7f\u7528\u5207\u7247\u3001numpy\u89c6\u56fe\u7b49<\/li>\n\n\n\n<li>\u6ce8\u610f\u4e8b\u9879\uff1a\u67d0\u4e9b\u64cd\u4f5c\u53ef\u80fd\u89e6\u53d1\u5b8c\u6574\u590d\u5236<\/li>\n\n\n\n<li>\u5185\u5b58\u8282\u7701\uff1a\u907f\u514d\u590d\u5236\u4e0d\u9700\u8981\u7684\u6570\u636e<\/li>\n<\/ul>\n\n\n\n<ol class=\"wp-block-list\">\n<li>\u4f7f\u7528\u751f\u6210\u5668\u548c\u8fed\u4ee3\u5668<\/li>\n<\/ol>\n\n\n\n<ul class=\"wp-block-list\">\n<li>\u9002\u7528\u573a\u666f\uff1a\u5904\u7406\u6d41\u5f0f\u6570\u636e\u6216\u5927\u6570\u636e\u96c6<\/li>\n\n\n\n<li>\u5b9e\u73b0\u65b9\u5f0f\uff1a\u4f7f\u7528yield\u3001itertools\u7b49<\/li>\n\n\n\n<li>\u6ce8\u610f\u4e8b\u9879\uff1a\u6570\u636e\u53ea\u80fd\u987a\u5e8f\u8bbf\u95ee\u4e00\u6b21<\/li>\n\n\n\n<li>\u5185\u5b58\u8282\u7701\uff1a\u51e0\u4e4e\u4e0d\u4f7f\u7528\u989d\u5916\u5185\u5b58<\/li>\n<\/ul>\n\n\n\n<ol class=\"wp-block-list\">\n<li>\u4f7f\u7528\u5185\u5b58\u6620\u5c04\u6587\u4ef6<\/li>\n<\/ol>\n\n\n\n<ul class=\"wp-block-list\">\n<li>\u9002\u7528\u573a\u666f\uff1a\u5904\u7406\u8d85\u5927\u6587\u4ef6<\/li>\n\n\n\n<li>\u5b9e\u73b0\u65b9\u5f0f\uff1ammap\u6a21\u5757\u3001numpy.memmap<\/li>\n\n\n\n<li>\u6ce8\u610f\u4e8b\u9879\uff1aIO\u6027\u80fd\u53ef\u80fd\u6210\u4e3a\u74f6\u9888<\/li>\n\n\n\n<li>\u5185\u5b58\u8282\u7701\uff1a\u64cd\u4f5c\u7cfb\u7edf\u7ba1\u7406\u5185\u5b58\uff0c\u5e94\u7528\u5185\u5b58\u4f7f\u7528\u5c11<\/li>\n<\/ul>\n\n\n\n<ol class=\"wp-block-list\">\n<li>\u5ef6\u8fdf\u8ba1\u7b97\u548c\u7f13\u5b58<\/li>\n<\/ol>\n\n\n\n<ul class=\"wp-block-list\">\n<li>\u9002\u7528\u573a\u666f\uff1a\u8ba1\u7b97\u5f00\u9500\u5927\uff0c\u7ed3\u679c\u53ef\u590d\u7528<\/li>\n\n\n\n<li>\u5b9e\u73b0\u65b9\u5f0f\uff1alazy\u5c5e\u6027\u3001\u7f13\u5b58\u88c5\u9970\u5668<\/li>\n\n\n\n<li>\u6ce8\u610f\u4e8b\u9879\uff1a\u53ef\u80fd\u589e\u52a0\u4ee3\u7801\u590d\u6742\u5ea6<\/li>\n\n\n\n<li>\u5185\u5b58\u8282\u7701\uff1a\u6309\u9700\u8ba1\u7b97\uff0c\u907f\u514d\u5b58\u50a8\u4e2d\u95f4\u7ed3\u679c<\/li>\n<\/ul>\n\n\n\n<h2 class=\"wp-block-heading\">\u7b2c\u4e94\u90e8\u5206\uff1a\u5b9e\u6218\u5e94\u7528\u4e0e\u8bbe\u8ba1\u6a21\u5f0f<\/h2>\n\n\n\n<h3 class=\"wp-block-heading\">5.1 \u51fd\u6570\u5f0f\u7f16\u7a0b\u4e2d\u7684\u4e0d\u53ef\u53d8\u6027<\/h3>\n\n\n\n<p><strong>\u51fd\u6570\u5f0f\u7f16\u7a0b\u6838\u5fc3\u601d\u60f3\uff1a<\/strong><br>\u51fd\u6570\u5f0f\u7f16\u7a0b\u5f3a\u8c03\uff1a<\/p>\n\n\n\n<ol class=\"wp-block-list\">\n<li>\u4e0d\u53ef\u53d8\u6027\uff08Immutability\uff09\uff1a\u6570\u636e\u4e00\u65e6\u521b\u5efa\u5c31\u4e0d\u80fd\u4fee\u6539<\/li>\n\n\n\n<li>\u7eaf\u51fd\u6570\uff08Pure Functions\uff09\uff1a\u76f8\u540c\u8f93\u5165\u603b\u662f\u4ea7\u751f\u76f8\u540c\u8f93\u51fa\uff0c\u65e0\u526f\u4f5c\u7528<\/li>\n\n\n\n<li>\u5f15\u7528\u900f\u660e\uff08Referential Transparency\uff09\uff1a\u51fd\u6570\u8c03\u7528\u53ef\u4ee5\u7528\u5176\u8fd4\u56de\u503c\u66ff\u6362<\/li>\n<\/ol>\n\n\n\n<p>\u503c\u4f20\u9012\u4e0e\u51fd\u6570\u5f0f\u7f16\u7a0b\u7684\u5173\u7cfb\uff1a<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>\u503c\u4f20\u9012\u5929\u7136\u652f\u6301\u4e0d\u53ef\u53d8\u6027<\/li>\n\n\n\n<li>\u7eaf\u51fd\u6570\u4e0d\u4fee\u6539\u8f93\u5165\u53c2\u6570\uff0c\u53ea\u8fd4\u56de\u65b0\u503c<\/li>\n\n\n\n<li>\u5f15\u7528\u900f\u660e\u8981\u6c42\u51fd\u6570\u6ca1\u6709\u526f\u4f5c\u7528<\/li>\n<\/ul>\n\n\n\n<pre class=\"wp-block-code\"><code># ============================================================================\n# \u51fd\u6570\u5f0f\u7f16\u7a0b\u4e0e\u4e0d\u53ef\u53d8\u6027\n# ============================================================================\n\ndef demonstrate_functional_style():\n    \"\"\"\u6f14\u793a\u51fd\u6570\u5f0f\u7f16\u7a0b\u98ce\u683c\"\"\"\n\n    print(\"\u793a\u4f8b\uff1a\u4e0d\u53ef\u53d8\u6570\u636e\u5904\u7406\")\n\n    # \u4f20\u7edf\u547d\u4ee4\u5f0f\u98ce\u683c\uff08\u4fee\u6539\u539f\u59cb\u6570\u636e\uff09\n    def imperative_process(data):\n        \"\"\"\u547d\u4ee4\u5f0f\u5904\u7406\uff1a\u4fee\u6539\u539f\u59cb\u6570\u636e\"\"\"\n        data.sort()\n        data.append(100)\n        return data\n\n    # \u51fd\u6570\u5f0f\u98ce\u683c\uff08\u4e0d\u4fee\u6539\u539f\u59cb\u6570\u636e\uff09\n    def functional_process(data):\n        \"\"\"\u51fd\u6570\u5f0f\u5904\u7406\uff1a\u8fd4\u56de\u65b0\u6570\u636e\"\"\"\n        sorted_data = sorted(data)  # \u8fd4\u56de\u65b0\u5217\u8868\n        new_data = sorted_data + &#91;100]  # \u521b\u5efa\u65b0\u5217\u8868\n        return new_data\n\n    # \u6d4b\u8bd5\n    original_data = &#91;3, 1, 4, 1, 5, 9]\n\n    # \u547d\u4ee4\u5f0f\u5904\u7406\n    imperative_result = imperative_process(original_data.copy())\n\n    # \u51fd\u6570\u5f0f\u5904\u7406\n    functional_result = functional_process(original_data)\n\n    print(\"\u793a\u4f8b\uff1a\u94fe\u5f0f\u51fd\u6570\u8c03\u7528\")\n\n    # \u51fd\u6570\u5f0f\u5de5\u5177\u51fd\u6570\n    def filter_even(numbers):\n        \"\"\"\u8fc7\u6ee4\u5076\u6570\"\"\"\n        return &#91;n for n in numbers if n % 2 == 0]\n\n    def square(numbers):\n        \"\"\"\u5e73\u65b9\"\"\"\n        return &#91;n * n for n in numbers]\n\n    def sum_all(numbers):\n        \"\"\"\u6c42\u548c\"\"\"\n        return sum(numbers)\n\n    # \u4f20\u7edf\u65b9\u5f0f\n    data = &#91;1, 2, 3, 4, 5, 6, 7, 8, 9, 10]\n\n    evens = filter_even(data)\n    squares = square(evens)\n    total = sum_all(squares)\n\n    # \u4f7f\u7528\u7ba1\u9053\u64cd\u4f5c\n    def pipe(data, *funcs):\n        \"\"\"\u7b80\u5355\u7684\u7ba1\u9053\u5b9e\u73b0\"\"\"\n        result = data\n        for func in funcs:\n            result = func(result)\n        return result\n\n    pipe_result = pipe(\n        data,\n        filter_even,\n        square,\n        sum_all\n    )\n\n    print(\"\u793a\u4f8b\uff1a\u4e0d\u53ef\u53d8\u6570\u636e\u7ed3\u6784\")\n\n    # \u4f7f\u7528\u4e0d\u53ef\u53d8\u6570\u636e\u7c7b\u578b\n    from typing import NamedTuple\n\n    # \u547d\u540d\u5143\u7ec4\uff08\u4e0d\u53ef\u53d8\uff09\n    class Point(NamedTuple):\n        x: float\n        y: float\n\n    # \u521b\u5efa\u4e0d\u53ef\u53d8\u5bf9\u8c61\n    p1 = Point(1.0, 2.0)\n\n    # \u5c1d\u8bd5\u4fee\u6539\uff08\u4f1a\u521b\u5efa\u65b0\u5bf9\u8c61\uff09\n    p2 = p1._replace(x=3.0)\n\ndemonstrate_functional_style()<\/code><\/pre>\n\n\n\n<p><strong>\u51fd\u6570\u5f0f\u7f16\u7a0b\u7684\u4f18\u52bf\uff1a<\/strong><\/p>\n\n\n\n<ol class=\"wp-block-list\">\n<li>\u7ebf\u7a0b\u5b89\u5168\uff1a\u4e0d\u53ef\u53d8\u6570\u636e\u5929\u7136\u7ebf\u7a0b\u5b89\u5168<\/li>\n\n\n\n<li>\u6613\u4e8e\u6d4b\u8bd5\uff1a\u7eaf\u51fd\u6570\u6ca1\u6709\u526f\u4f5c\u7528\uff0c\u6d4b\u8bd5\u7b80\u5355<\/li>\n\n\n\n<li>\u6613\u4e8e\u63a8\u7406\uff1a\u51fd\u6570\u884c\u4e3a\u53ef\u9884\u6d4b<\/li>\n\n\n\n<li>\u6613\u4e8e\u5e76\u884c\u5316\uff1a\u6ca1\u6709\u5171\u4eab\u72b6\u6001\uff0c\u5bb9\u6613\u5e76\u884c\u5904\u7406<\/li>\n\n\n\n<li>\u4ee3\u7801\u7b80\u6d01\uff1a\u901a\u8fc7\u51fd\u6570\u7ec4\u5408\u8868\u8fbe\u590d\u6742\u903b\u8f91<\/li>\n<\/ol>\n\n\n\n<h3 class=\"wp-block-heading\">5.2 \u8bbe\u8ba1\u6a21\u5f0f\u4e2d\u7684\u5e94\u7528<\/h3>\n\n\n\n<p><strong>\u8bbe\u8ba1\u6a21\u5f0f\u5982\u4f55\u5229\u7528\u4e0d\u540c\u7684\u53c2\u6570\u4f20\u9012\u65b9\u5f0f\uff1a<\/strong><\/p>\n\n\n\n<pre class=\"wp-block-code\"><code># ============================================================================\n# \u8bbe\u8ba1\u6a21\u5f0f\u4e2d\u7684\u503c\u4f20\u9012\u4e0e\u5f15\u7528\u4f20\u9012\n# ============================================================================\n\ndef demonstrate_design_patterns():\n    \"\"\"\u6f14\u793a\u8bbe\u8ba1\u6a21\u5f0f\u4e2d\u7684\u53c2\u6570\u4f20\u9012\u5e94\u7528\"\"\"\n\n    print(\"1. \u7b56\u7565\u6a21\u5f0f\uff08Strategy Pattern\uff09\")\n    print(\"\u7b56\u7565\u6a21\u5f0f\u5b9a\u4e49\u4e00\u7cfb\u5217\u7b97\u6cd5\uff0c\u5c06\u6bcf\u4e2a\u7b97\u6cd5\u5c01\u88c5\u8d77\u6765\uff0c\u5e76\u4f7f\u5b83\u4eec\u53ef\u4ee5\u4e92\u76f8\u66ff\u6362\u3002\")\n    print(\"\u53c2\u6570\u4f20\u9012\uff1a\u901a\u5e38\u901a\u8fc7\u5f15\u7528\u4f20\u9012\u7b56\u7565\u5bf9\u8c61\u3002\")\n\n    from abc import ABC, abstractmethod\n    from typing import List\n\n    # \u7b56\u7565\u63a5\u53e3\n    class SortingStrategy(ABC):\n        @abstractmethod\n        def sort(self, data: List&#91;int]) -&gt; List&#91;int]:\n            pass\n\n    # \u5177\u4f53\u7b56\u7565\n    class BubbleSort(SortingStrategy):\n        def sort(self, data: List&#91;int]) -&gt; List&#91;int]:\n            \"\"\"\u5192\u6ce1\u6392\u5e8f\uff08\u8fd4\u56de\u65b0\u5217\u8868\uff09\"\"\"\n            data_copy = data.copy()\n            n = len(data_copy)\n            for i in range(n):\n                for j in range(0, n - i - 1):\n                    if data_copy&#91;j] &gt; data_copy&#91;j + 1]:\n                        data_copy&#91;j], data_copy&#91;j + 1] = data_copy&#91;j + 1], data_copy&#91;j]\n            return data_copy\n\n    # \u4e0a\u4e0b\u6587\n    class Sorter:\n        def __init__(self, strategy: SortingStrategy):\n            self.strategy = strategy  # \u901a\u8fc7\u5f15\u7528\u4f20\u9012\u7b56\u7565\u5bf9\u8c61\n\n        def execute_sort(self, data: List&#91;int]) -&gt; List&#91;int]:\n            return self.strategy.sort(data)\n\n    print(\"\\n2. \u5de5\u5382\u6a21\u5f0f\uff08Factory Pattern\uff09\")\n    print(\"\u5de5\u5382\u6a21\u5f0f\u521b\u5efa\u5bf9\u8c61\u800c\u4e0d\u6307\u5b9a\u5177\u4f53\u7c7b\u3002\")\n    print(\"\u53c2\u6570\u4f20\u9012\uff1a\u901a\u8fc7\u503c\u4f20\u9012\u914d\u7f6e\u53c2\u6570\uff0c\u901a\u8fc7\u5f15\u7528\u8fd4\u56de\u5bf9\u8c61\u3002\")\n\n    class DatabaseConnection:\n        def __init__(self, connection_string: str):\n            self.connection_string = connection_string\n\n        def connect(self):\n            return f\"\u8fde\u63a5\u5230: {self.connection_string}\"\n\n    class DatabaseFactory:\n        @staticmethod\n        def create_connection(db_type: str, host: str, port: int, \n                             username: str, password: str) -&gt; DatabaseConnection:\n            \"\"\"\u5de5\u5382\u65b9\u6cd5\uff1a\u901a\u8fc7\u503c\u4f20\u9012\u914d\u7f6e\u53c2\u6570\"\"\"\n            if db_type == \"mysql\":\n                conn_str = f\"mysql:\/\/{username}:{password}@{host}:{port}\"\n            else:\n                raise ValueError(f\"\u4e0d\u652f\u6301\u7684\u6570\u636e\u5e93\u7c7b\u578b: {db_type}\")\n\n            # \u521b\u5efa\u5e76\u8fd4\u56de\u5bf9\u8c61\u5f15\u7528\n            return DatabaseConnection(conn_str)\n\n    print(\"\\n3. \u89c2\u5bdf\u8005\u6a21\u5f0f\uff08Observer Pattern\uff09\")\n    print(\"\u89c2\u5bdf\u8005\u6a21\u5f0f\u5b9a\u4e49\u5bf9\u8c61\u95f4\u7684\u4e00\u5bf9\u591a\u4f9d\u8d56\u5173\u7cfb\u3002\")\n    print(\"\u53c2\u6570\u4f20\u9012\uff1a\u901a\u5e38\u901a\u8fc7\u5f15\u7528\u4f20\u9012\u89c2\u5bdf\u8005\u5bf9\u8c61\u548c\u4e8b\u4ef6\u6570\u636e\u3002\")\n\n    class EventData:\n        \"\"\"\u4e8b\u4ef6\u6570\u636e\uff08\u901a\u5e38\u662f\u4e0d\u53ef\u53d8\u6216\u590d\u5236\u7684\uff09\"\"\"\n        def __init__(self, name: str, payload: dict):\n            self.name = name\n            self.payload = payload.copy()  # \u590d\u5236payload\uff0c\u9632\u6b62\u88ab\u4fee\u6539\n\n    class Observer(ABC):\n        @abstractmethod\n        def update(self, event: EventData):\n            pass\n\n    class Subject:\n        def __init__(self):\n            self._observers: List&#91;Observer] = &#91;]\n\n        def attach(self, observer: Observer):\n            self._observers.append(observer)  # \u901a\u8fc7\u5f15\u7528\u4f20\u9012\u89c2\u5bdf\u8005\n\n        def notify(self, event: EventData):\n            for observer in self._observers:\n                observer.update(event)  # \u901a\u8fc7\u5f15\u7528\u4f20\u9012\u4e8b\u4ef6\u6570\u636e\n\n    print(\"\\n4. \u5907\u5fd8\u5f55\u6a21\u5f0f\uff08Memento Pattern\uff09\")\n    print(\"\u5907\u5fd8\u5f55\u6a21\u5f0f\u6355\u83b7\u5bf9\u8c61\u5185\u90e8\u72b6\u6001\u5e76\u5728\u4ee5\u540e\u6062\u590d\u3002\")\n    print(\"\u53c2\u6570\u4f20\u9012\uff1a\u901a\u8fc7\u503c\u4f20\u9012\u72b6\u6001\uff08\u6df1\u62f7\u8d1d\uff09\u4ee5\u786e\u4fdd\u72b6\u6001\u72ec\u7acb\u3002\")\n\n    class GameState:\n        \"\"\"\u6e38\u620f\u72b6\u6001\"\"\"\n        def __init__(self, level: int, score: int, items: List&#91;str]):\n            self.level = level\n            self.score = score\n            self.items = items.copy()  # \u590d\u5236\u5217\u8868\uff0c\u9632\u6b62\u88ab\u4fee\u6539\n\n    class GameMemento:\n        \"\"\"\u5907\u5fd8\u5f55\uff1a\u4fdd\u5b58\u6e38\u620f\u72b6\u6001\"\"\"\n        def __init__(self, state: GameState):\n            # \u6df1\u62f7\u8d1d\u72b6\u6001\u4ee5\u786e\u4fdd\u72ec\u7acb\u6027\n            self._state = GameState(state.level, state.score, state.items)\n\n        def get_state(self) -&gt; GameState:\n            # \u8fd4\u56de\u72b6\u6001\u7684\u526f\u672c\n            return GameState(self._state.level, self._state.score, self._state.items)\n\ndemonstrate_design_patterns()<\/code><\/pre>\n\n\n\n<p><strong>\u8bbe\u8ba1\u6a21\u5f0f\u4e2d\u7684\u53c2\u6570\u4f20\u9012\u539f\u5219\uff1a<\/strong><\/p>\n\n\n\n<ol class=\"wp-block-list\">\n<li>\u7b56\u7565\u6a21\u5f0f\uff1a\u901a\u8fc7\u5f15\u7528\u4f20\u9012\u7b56\u7565\u5bf9\u8c61\uff0c\u5b9e\u73b0\u7075\u6d3b\u66ff\u6362<\/li>\n\n\n\n<li>\u5de5\u5382\u6a21\u5f0f\uff1a\u901a\u8fc7\u503c\u4f20\u9012\u914d\u7f6e\uff0c\u901a\u8fc7\u5f15\u7528\u8fd4\u56de\u5bf9\u8c61<\/li>\n\n\n\n<li>\u89c2\u5bdf\u8005\u6a21\u5f0f\uff1a\u901a\u8fc7\u5f15\u7528\u4f20\u9012\u89c2\u5bdf\u8005\u548c\u4e8b\u4ef6\u6570\u636e<\/li>\n\n\n\n<li>\u5907\u5fd8\u5f55\u6a21\u5f0f\uff1a\u901a\u8fc7\u503c\u4f20\u9012\uff08\u6df1\u62f7\u8d1d\uff09\u72b6\u6001\uff0c\u786e\u4fdd\u72ec\u7acb\u6027<\/li>\n\n\n\n<li>\u901a\u7528\u539f\u5219\uff1a\u6839\u636e\u573a\u666f\u9009\u62e9\u4f20\u9012\u65b9\u5f0f\uff0c\u5e73\u8861\u6027\u80fd\u4e0e\u5b89\u5168\u6027<\/li>\n<\/ol>\n\n\n\n<h2 class=\"wp-block-heading\">\u7b2c\u516d\u90e8\u5206\uff1a\u9762\u8bd5\u5e38\u89c1\u95ee\u9898\u4e0e\u89e3\u7b54<\/h2>\n\n\n\n<h3 class=\"wp-block-heading\">\u503c\u4f20\u9012 vs \u5f15\u7528\u4f20\u9012\u7684\u7ecf\u5178\u9762\u8bd5\u9898\uff1a<\/h3>\n\n\n\n<p><strong>\u95ee\u98981\uff1aPython\u4e2d\uff0c\u53c2\u6570\u4f20\u9012\u662f\u503c\u4f20\u9012\u8fd8\u662f\u5f15\u7528\u4f20\u9012\uff1f<\/strong><\/p>\n\n\n\n<p><strong>\u7b54\u6848\uff1a<\/strong><br>Python\u7684\u53c2\u6570\u4f20\u9012\u662f&#8221;\u5bf9\u8c61\u5f15\u7528\u4f20\u9012&#8221;\u3002\u66f4\u51c6\u786e\u5730\u8bf4\uff0cPython\u4f20\u9012\u7684\u662f\u5bf9\u8c61\u7684\u5f15\u7528\uff08\u5185\u5b58\u5730\u5740\uff09\uff0c\u4f46\u8fd9\u4e2a\u884c\u4e3a\u6839\u636e\u5bf9\u8c61\u7684\u53ef\u53d8\u6027\u800c\u4e0d\u540c\uff1a<\/p>\n\n\n\n<ol class=\"wp-block-list\">\n<li>\u5bf9\u4e8e\u4e0d\u53ef\u53d8\u5bf9\u8c61\uff08int, str, tuple\u7b49\uff09\uff1a<\/li>\n<\/ol>\n\n\n\n<ul class=\"wp-block-list\">\n<li>\u4f20\u9012\u5bf9\u8c61\u5f15\u7528<\/li>\n\n\n\n<li>\u51fd\u6570\u5185\u4e0d\u80fd\u4fee\u6539\u539f\u5bf9\u8c61\uff08\u8868\u73b0\u7c7b\u4f3c\u503c\u4f20\u9012\uff09<\/li>\n\n\n\n<li>\u4fee\u6539\u64cd\u4f5c\u4f1a\u521b\u5efa\u65b0\u5bf9\u8c61<\/li>\n<\/ul>\n\n\n\n<ol class=\"wp-block-list\">\n<li>\u5bf9\u4e8e\u53ef\u53d8\u5bf9\u8c61\uff08list, dict, set\u7b49\uff09\uff1a<\/li>\n<\/ol>\n\n\n\n<ul class=\"wp-block-list\">\n<li>\u4f20\u9012\u5bf9\u8c61\u5f15\u7528<\/li>\n\n\n\n<li>\u51fd\u6570\u5185\u53ef\u4ee5\u4fee\u6539\u539f\u5bf9\u8c61\uff08\u8868\u73b0\u7c7b\u4f3c\u5f15\u7528\u4f20\u9012\uff09<\/li>\n\n\n\n<li>\u4f46\u91cd\u65b0\u8d4b\u503c\u4e0d\u4f1a\u5f71\u54cd\u8c03\u7528\u8005\u7684\u5f15\u7528<\/li>\n<\/ul>\n\n\n\n<p>\u7b80\u5355\u8bb0\u5fc6\uff1aPython\u4e2d\u4e00\u5207\u7686\u5bf9\u8c61\uff0c\u4f20\u9012\u7684\u90fd\u662f\u5bf9\u8c61\u5f15\u7528\u3002<\/p>\n\n\n\n<p><strong>\u95ee\u98982\uff1aJava\u4e2d\uff0c\u5982\u4f55\u7406\u89e3&#8217;Java\u662f\u503c\u4f20\u9012&#8217;\u8fd9\u53e5\u8bdd\uff1f<\/strong><\/p>\n\n\n\n<p><strong>\u7b54\u6848\uff1a<\/strong><br>Java\u4e25\u683c\u9075\u5faa\u503c\u4f20\u9012\uff0c\u4f46\u9700\u8981\u533a\u5206\u57fa\u672c\u7c7b\u578b\u548c\u5bf9\u8c61\u7c7b\u578b\uff1a<\/p>\n\n\n\n<ol class=\"wp-block-list\">\n<li>\u57fa\u672c\u7c7b\u578b\uff08int, double, boolean\u7b49\uff09\uff1a<\/li>\n<\/ol>\n\n\n\n<ul class=\"wp-block-list\">\n<li>\u4f20\u9012\u503c\u7684\u526f\u672c<\/li>\n\n\n\n<li>\u51fd\u6570\u5185\u4fee\u6539\u4e0d\u5f71\u54cd\u539f\u59cb\u503c<\/li>\n<\/ul>\n\n\n\n<ol class=\"wp-block-list\">\n<li>\u5bf9\u8c61\u7c7b\u578b\uff08\u6570\u7ec4\u3001String\u3001\u81ea\u5b9a\u4e49\u5bf9\u8c61\u7b49\uff09\uff1a<\/li>\n<\/ol>\n\n\n\n<ul class=\"wp-block-list\">\n<li>\u4f20\u9012\u5bf9\u8c61\u5f15\u7528\u7684\u526f\u672c<\/li>\n\n\n\n<li>\u53ef\u4ee5\u901a\u8fc7\u8fd9\u4e2a\u5f15\u7528\u526f\u672c\u4fee\u6539\u5bf9\u8c61\u5185\u5bb9<\/li>\n\n\n\n<li>\u4f46\u4e0d\u80fd\u4fee\u6539\u8c03\u7528\u8005\u6301\u6709\u7684\u539f\u59cb\u5f15\u7528<\/li>\n<\/ul>\n\n\n\n<p>\u5173\u952e\u7406\u89e3\uff1aJava\u4f20\u9012\u7684\u662f&#8221;\u503c\u7684\u526f\u672c&#8221;\u3002\u5bf9\u4e8e\u5bf9\u8c61\uff0c\u8fd9\u4e2a&#8221;\u503c&#8221;\u5c31\u662f\u5bf9\u8c61\u5f15\u7528\u3002\u6240\u4ee5\u4f60\u53ef\u4ee5\u901a\u8fc7\u5f15\u7528\u4fee\u6539\u5bf9\u8c61\uff0c\u4f46\u4e0d\u80fd\u8ba9\u8c03\u7528\u8005\u7684\u5f15\u7528\u6307\u5411\u65b0\u5bf9\u8c61\u3002<\/p>\n\n\n\n<p><strong>\u95ee\u98983\uff1aC++\u4e2d\uff0c\u503c\u4f20\u9012\u3001\u5f15\u7528\u4f20\u9012\u548c\u6307\u9488\u4f20\u9012\u6709\u4ec0\u4e48\u533a\u522b\uff1f<\/strong><\/p>\n\n\n\n<p><strong>\u7b54\u6848\uff1a<\/strong><br>C++\u63d0\u4f9b\u4e86\u591a\u79cd\u53c2\u6570\u4f20\u9012\u65b9\u5f0f\uff0c\u5404\u6709\u7528\u9014\uff1a<\/p>\n\n\n\n<ol class=\"wp-block-list\">\n<li>\u503c\u4f20\u9012\uff08pass by value\uff09\uff1a<\/li>\n<\/ol>\n\n\n\n<ul class=\"wp-block-list\">\n<li>\u4f20\u9012\u6570\u636e\u7684\u526f\u672c<\/li>\n\n\n\n<li>\u51fd\u6570\u5185\u4fee\u6539\u4e0d\u5f71\u54cd\u539f\u59cb\u6570\u636e<\/li>\n\n\n\n<li>\u9002\u7528\u4e8e\u5c0f\u5bf9\u8c61\u6216\u4e0d\u9700\u8981\u4fee\u6539\u7684\u573a\u666f<\/li>\n<\/ul>\n\n\n\n<ol class=\"wp-block-list\">\n<li>\u5f15\u7528\u4f20\u9012\uff08pass by reference\uff09\uff1a<\/li>\n<\/ol>\n\n\n\n<ul class=\"wp-block-list\">\n<li>\u4f20\u9012\u6570\u636e\u7684\u522b\u540d\uff08\u5f15\u7528\uff09<\/li>\n\n\n\n<li>\u51fd\u6570\u5185\u4fee\u6539\u76f4\u63a5\u5f71\u54cd\u539f\u59cb\u6570\u636e<\/li>\n\n\n\n<li>\u9002\u7528\u4e8e\u9700\u8981\u4fee\u6539\u6216\u907f\u514d\u590d\u5236\u5927\u5bf9\u8c61\u7684\u573a\u666f<\/li>\n<\/ul>\n\n\n\n<ol class=\"wp-block-list\">\n<li>\u6307\u9488\u4f20\u9012\uff08pass by pointer\uff09\uff1a<\/li>\n<\/ol>\n\n\n\n<ul class=\"wp-block-list\">\n<li>\u4f20\u9012\u6307\u9488\u7684\u526f\u672c\uff08\u503c\u4f20\u9012\u6307\u9488\uff09<\/li>\n\n\n\n<li>\u53ef\u4ee5\u901a\u8fc7\u6307\u9488\u4fee\u6539\u539f\u59cb\u6570\u636e<\/li>\n\n\n\n<li>\u6307\u9488\u672c\u8eab\u53ef\u4ee5\u88ab\u4fee\u6539\uff08\u4f46\u53ea\u5f71\u54cd\u526f\u672c\uff09<\/li>\n\n\n\n<li>\u66f4\u7075\u6d3b\uff0c\u4f46\u9700\u8981\u5904\u7406\u7a7a\u6307\u9488\u548c\u5185\u5b58\u7ba1\u7406<\/li>\n<\/ul>\n\n\n\n<p>\u9009\u62e9\u6307\u5357\uff1a<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>\u9700\u8981\u4fee\u6539\u539f\u59cb\u6570\u636e \u2192 \u5f15\u7528\u4f20\u9012<\/li>\n\n\n\n<li>\u4e0d\u9700\u8981\u4fee\u6539\u4f46\u5bf9\u8c61\u5f88\u5927 \u2192 const\u5f15\u7528\u4f20\u9012<\/li>\n\n\n\n<li>\u53ef\u9009\u53c2\u6570\u6216\u9700\u8981\u7a7a\u503c \u2192 \u6307\u9488\u4f20\u9012<\/li>\n\n\n\n<li>\u5c0f\u5bf9\u8c61\u4e14\u4e0d\u9700\u8981\u4fee\u6539 \u2192 \u503c\u4f20\u9012<\/li>\n<\/ul>\n\n\n\n<p><strong>\u95ee\u98984\uff1a\u5982\u4f55\u907f\u514d\u51fd\u6570\u610f\u5916\u4fee\u6539\u8c03\u7528\u8005\u7684\u6570\u636e\uff1f<\/strong><\/p>\n\n\n\n<p><strong>\u7b54\u6848\uff1a<\/strong><br>\u6709\u51e0\u79cd\u7b56\u7565\u53ef\u4ee5\u907f\u514d\u610f\u5916\u4fee\u6539\uff1a<\/p>\n\n\n\n<ol class=\"wp-block-list\">\n<li>\u4f7f\u7528\u4e0d\u53ef\u53d8\u6570\u636e\u7ed3\u6784\uff1a<\/li>\n<\/ol>\n\n\n\n<ul class=\"wp-block-list\">\n<li>\u4f20\u9012\u5143\u7ec4\u4ee3\u66ff\u5217\u8868<\/li>\n\n\n\n<li>\u4f7f\u7528frozenset\u4ee3\u66ffset<\/li>\n\n\n\n<li>\u4f7f\u7528\u4e0d\u53ef\u53d8\u5bf9\u8c61<\/li>\n<\/ul>\n\n\n\n<ol class=\"wp-block-list\">\n<li>\u521b\u5efa\u9632\u5fa1\u6027\u526f\u672c\uff1a<\/li>\n<\/ol>\n\n\n\n<ul class=\"wp-block-list\">\n<li>\u5728\u51fd\u6570\u5f00\u59cb\u5904\u590d\u5236\u53c2\u6570<\/li>\n\n\n\n<li>\u4f7f\u7528\u6df1\u62f7\u8d1d\u5904\u7406\u5d4c\u5957\u5bf9\u8c61<\/li>\n\n\n\n<li>\u8fd4\u56de\u65b0\u5bf9\u8c61\u800c\u4e0d\u662f\u4fee\u6539\u539f\u5bf9\u8c61<\/li>\n<\/ul>\n\n\n\n<ol class=\"wp-block-list\">\n<li>\u4f7f\u7528const\u6216final\uff1a<\/li>\n<\/ol>\n\n\n\n<ul class=\"wp-block-list\">\n<li>C++\u4e2d\u4f7f\u7528const\u5f15\u7528<\/li>\n\n\n\n<li>Java\u4e2d\u4f7f\u7528final\u53c2\u6570<\/li>\n\n\n\n<li>\u8fd9\u4e9b\u662f\u7f16\u8bd1\u65f6\u68c0\u67e5\uff0c\u9632\u6b62\u610f\u5916\u4fee\u6539<\/li>\n<\/ul>\n\n\n\n<ol class=\"wp-block-list\">\n<li>\u7f16\u5199\u7eaf\u51fd\u6570\uff1a<\/li>\n<\/ol>\n\n\n\n<ul class=\"wp-block-list\">\n<li>\u76f8\u540c\u8f93\u5165\u603b\u662f\u8fd4\u56de\u76f8\u540c\u8f93\u51fa<\/li>\n\n\n\n<li>\u6ca1\u6709\u526f\u4f5c\u7528\uff08\u4e0d\u4fee\u6539\u5916\u90e8\u72b6\u6001\uff09<\/li>\n\n\n\n<li>\u66f4\u5bb9\u6613\u6d4b\u8bd5\u548c\u63a8\u7406<\/li>\n<\/ul>\n\n\n\n<ol class=\"wp-block-list\">\n<li>\u6587\u6863\u548c\u7ea6\u5b9a\uff1a<\/li>\n<\/ol>\n\n\n\n<ul class=\"wp-block-list\">\n<li>\u660e\u786e\u6587\u6863\u8bf4\u660e\u51fd\u6570\u662f\u5426\u4f1a\u4fee\u6539\u53c2\u6570<\/li>\n\n\n\n<li>\u4f7f\u7528\u547d\u540d\u7ea6\u5b9a\uff08\u5982process_copy vs process_inplace\uff09<\/li>\n\n\n\n<li>\u5728\u4ee3\u7801\u5ba1\u67e5\u4e2d\u68c0\u67e5\u53c2\u6570\u4fee\u6539<\/li>\n<\/ul>\n\n\n\n<p>\u5b9e\u9645\u9009\u62e9\u53d6\u51b3\u4e8e\u6027\u80fd\u8981\u6c42\u3001\u6570\u636e\u5927\u5c0f\u548c\u4ee3\u7801\u6e05\u6670\u5ea6\u3002<\/p>\n\n\n\n<p><strong>\u95ee\u98985\uff1a\u5728\u5e76\u53d1\u7f16\u7a0b\u4e2d\uff0c\u503c\u4f20\u9012\u548c\u5f15\u7528\u4f20\u9012\u6709\u4ec0\u4e48\u5f71\u54cd\uff1f<\/strong><\/p>\n\n\n\n<p><strong>\u7b54\u6848\uff1a<\/strong><br>\u5e76\u53d1\u7f16\u7a0b\u4e2d\uff0c\u53c2\u6570\u4f20\u9012\u65b9\u5f0f\u76f4\u63a5\u5f71\u54cd\u7ebf\u7a0b\u5b89\u5168\uff1a<\/p>\n\n\n\n<ol class=\"wp-block-list\">\n<li>\u503c\u4f20\u9012\u7684\u4f18\u52bf\uff1a<\/li>\n<\/ol>\n\n\n\n<ul class=\"wp-block-list\">\n<li>\u6bcf\u4e2a\u7ebf\u7a0b\u83b7\u5f97\u6570\u636e\u526f\u672c\uff0c\u5b8c\u5168\u72ec\u7acb<\/li>\n\n\n\n<li>\u4e0d\u9700\u8981\u540c\u6b65\uff0c\u5929\u7136\u7ebf\u7a0b\u5b89\u5168<\/li>\n\n\n\n<li>\u907f\u514d\u7ade\u6001\u6761\u4ef6\u548c\u6570\u636e\u7ade\u4e89<\/li>\n\n\n\n<li>\u7f3a\u70b9\u662f\u5185\u5b58\u5f00\u9500\u548c\u590d\u5236\u65f6\u95f4<\/li>\n<\/ul>\n\n\n\n<ol class=\"wp-block-list\">\n<li>\u5f15\u7528\u4f20\u9012\u7684\u98ce\u9669\uff1a<\/li>\n<\/ol>\n\n\n\n<ul class=\"wp-block-list\">\n<li>\u591a\u4e2a\u7ebf\u7a0b\u5171\u4eab\u540c\u4e00\u6570\u636e<\/li>\n\n\n\n<li>\u9700\u8981\u540c\u6b65\u673a\u5236\uff08\u9501\u3001\u4fe1\u53f7\u91cf\u7b49\uff09<\/li>\n\n\n\n<li>\u5bb9\u6613\u4ea7\u751f\u7ade\u6001\u6761\u4ef6\u548c\u6b7b\u9501<\/li>\n\n\n\n<li>\u4f46\u5185\u5b58\u6548\u7387\u9ad8\uff0c\u9002\u5408\u53ea\u8bfb\u5171\u4eab<\/li>\n<\/ul>\n\n\n\n<ol class=\"wp-block-list\">\n<li>\u6700\u4f73\u5b9e\u8df5\uff1a<\/li>\n<\/ol>\n\n\n\n<ul class=\"wp-block-list\">\n<li>\u53ea\u8bfb\u6570\u636e\uff1a\u53ef\u4ee5\u4f7f\u7528\u5f15\u7528\u4f20\u9012\u5171\u4eab<\/li>\n\n\n\n<li>\u9700\u8981\u4fee\u6539\u7684\u6570\u636e\uff1a\u4f7f\u7528\u503c\u4f20\u9012\u6216\u6df1\u5ea6\u590d\u5236<\/li>\n\n\n\n<li>\u7ebf\u7a0b\u95f4\u901a\u4fe1\uff1a\u4f7f\u7528\u6d88\u606f\u4f20\u9012\u800c\u4e0d\u662f\u5171\u4eab\u5185\u5b58<\/li>\n\n\n\n<li>\u51fd\u6570\u5f0f\u98ce\u683c\uff1a\u4f7f\u7528\u4e0d\u53ef\u53d8\u6570\u636e\u548c\u7eaf\u51fd\u6570<\/li>\n<\/ul>\n\n\n\n<ol class=\"wp-block-list\">\n<li>\u73b0\u4ee3\u5e76\u53d1\u6a21\u5f0f\uff1a<\/li>\n<\/ol>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Actor\u6a21\u578b\uff1a\u6bcf\u4e2aactor\u6709\u79c1\u6709\u72b6\u6001\uff0c\u901a\u8fc7\u6d88\u606f\u901a\u4fe1<\/li>\n\n\n\n<li>\u6570\u636e\u5e76\u884c\uff1a\u76f8\u540c\u64cd\u4f5c\u5e94\u7528\u4e8e\u6570\u636e\u7684\u4e0d\u540c\u90e8\u5206<\/li>\n\n\n\n<li>\u4efb\u52a1\u5e76\u884c\uff1a\u4e0d\u540c\u4efb\u52a1\u5904\u7406\u4e0d\u540c\u6570\u636e<\/li>\n<\/ul>\n\n\n\n<p>\u9009\u62e9\u65f6\u8003\u8651\uff1a\u6570\u636e\u5927\u5c0f\u3001\u64cd\u4f5c\u9891\u7387\u3001\u6027\u80fd\u8981\u6c42\u548c\u4ee3\u7801\u590d\u6742\u5ea6\u3002<\/p>\n\n\n\n<p><strong>\u9762\u8bd5\u51c6\u5907\u5efa\u8bae\uff1a<\/strong><\/p>\n\n\n\n<ol class=\"wp-block-list\">\n<li>\u7406\u89e3\u6982\u5ff5\u672c\u8d28\uff1a\u4e0d\u8981\u6b7b\u8bb0\u786c\u80cc\uff0c\u7406\u89e3\u80cc\u540e\u7684\u539f\u7406<\/li>\n\n\n\n<li>\u8bed\u8a00\u5dee\u5f02\uff1a\u719f\u6089\u4f60\u6240\u7528\u8bed\u8a00\u7684\u53c2\u6570\u4f20\u9012\u673a\u5236<\/li>\n\n\n\n<li>\u5b9e\u8df5\u7f16\u7801\uff1a\u901a\u8fc7\u7f16\u5199\u548c\u8c03\u8bd5\u4ee3\u7801\u52a0\u6df1\u7406\u89e3<\/li>\n\n\n\n<li>\u53ef\u89c6\u5316\u601d\u8003\uff1a\u5728\u8111\u6d77\u4e2d\u7ed8\u5236\u5185\u5b58\u56fe\u548c\u5f15\u7528\u5173\u7cfb<\/li>\n\n\n\n<li>\u51c6\u5907\u4f8b\u5b50\uff1a\u51c6\u59072-3\u4e2a\u80fd\u6e05\u6670\u8bf4\u660e\u95ee\u9898\u7684\u4ee3\u7801\u793a\u4f8b<\/li>\n\n\n\n<li>\u8054\u7cfb\u5b9e\u9645\uff1a\u601d\u8003\u5728\u5b9e\u9645\u9879\u76ee\u4e2d\u5982\u4f55\u5e94\u7528\u8fd9\u4e9b\u77e5\u8bc6<\/li>\n\n\n\n<li>\u51c6\u5907\u9677\u9631\u95ee\u9898\uff1a\u5982Python\u7684\u9ed8\u8ba4\u53c2\u6570\u9677\u9631\u3001Java\u7684String\u4f20\u9012\u7b49<\/li>\n\n\n\n<li>\u5c55\u793a\u6df1\u5ea6\uff1a\u4e0d\u4ec5\u56de\u7b54\u662f\u4ec0\u4e48\uff0c\u8fd8\u8981\u89e3\u91ca\u4e3a\u4ec0\u4e48\u548c\u600e\u4e48\u505a<\/li>\n<\/ol>\n\n\n\n<p><strong>\u9762\u8bd5\u4e2d\u53ef\u80fd\u9047\u5230\u7684\u8fdb\u9636\u95ee\u9898\uff1a<\/strong><\/p>\n\n\n\n<ol class=\"wp-block-list\">\n<li>\u89e3\u91caPython\u7684GIL\u5982\u4f55\u5f71\u54cd\u53c2\u6570\u4f20\u9012\u548c\u5e76\u53d1\u7f16\u7a0b\uff1f<\/li>\n\n\n\n<li>\u5728\u5206\u5e03\u5f0f\u7cfb\u7edf\u4e2d\uff0c\u503c\u4f20\u9012\u548c\u5f15\u7528\u4f20\u9012\u6709\u4ec0\u4e48\u4e0d\u540c\u7684\u8003\u8651\uff1f<\/li>\n\n\n\n<li>\u5982\u4f55\u8bbe\u8ba1\u4e00\u4e2aAPI\uff0c\u4f7f\u5176\u65e2\u80fd\u9ad8\u6548\u4f20\u9012\u5927\u5bf9\u8c61\uff0c\u53c8\u80fd\u4fdd\u62a4\u6570\u636e\u4e0d\u88ab\u610f\u5916\u4fee\u6539\uff1f<\/li>\n\n\n\n<li>\u89e3\u91ca\u51fd\u6570\u5f0f\u7f16\u7a0b\u4e2d&#8217;\u5f15\u7528\u900f\u660e&#8217;\u4e0e\u53c2\u6570\u4f20\u9012\u7684\u5173\u7cfb\uff1f<\/li>\n\n\n\n<li>\u5728\u5fae\u670d\u52a1\u67b6\u6784\u4e2d\uff0c\u670d\u52a1\u95f4\u8c03\u7528\u5e94\u8be5\u4f7f\u7528\u54ea\u79cd\u53c2\u6570\u4f20\u9012\u8303\u5f0f\uff1f\u4e3a\u4ec0\u4e48\uff1f<\/li>\n\n\n\n<li>\u5982\u4f55\u5b9e\u73b0\u4e00\u4e2a\u652f\u6301&#8217;\u5199\u65f6\u590d\u5236&#8217;\uff08Copy-on-Write\uff09\u7684\u6570\u636e\u7ed3\u6784\uff1f<\/li>\n\n\n\n<li>\u89e3\u91ca\u73b0\u4ee3CPU\u7f13\u5b58\u5bf9\u53c2\u6570\u4f20\u9012\u6027\u80fd\u7684\u5f71\u54cd\uff1f<\/li>\n\n\n\n<li>\u5728\u54cd\u5e94\u5f0f\u7f16\u7a0b\u4e2d\uff0c\u6570\u636e\u6d41\u662f\u5982\u4f55\u4f20\u9012\u548c\u53d8\u6362\u7684\uff1f<\/li>\n<\/ol>\n\n\n\n<h2 class=\"wp-block-heading\">\u7b2c\u4e03\u90e8\u5206\uff1a\u7efc\u5408\u7ec3\u4e60\u4e0e\u5b9e\u6218\u9879\u76ee<\/h2>\n\n\n\n<h3 class=\"wp-block-heading\">\u7efc\u5408\u7ec3\u4e60\uff1a\u56fe\u50cf\u5904\u7406\u6d41\u6c34\u7ebf<\/h3>\n\n\n\n<p><strong>\u9879\u76ee\u76ee\u6807\uff1a<\/strong> \u5b9e\u73b0\u4e00\u4e2a\u56fe\u50cf\u5904\u7406\u7cfb\u7edf\uff0c\u5c55\u793a\u4e0d\u540c\u53c2\u6570\u4f20\u9012\u65b9\u5f0f\u7684\u5e94\u7528<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code># ============================================================================\n# \u7efc\u5408\u7ec3\u4e60\uff1a\u56fe\u50cf\u5904\u7406\u6d41\u6c34\u7ebf\n# ============================================================================\n\nfrom typing import List, Tuple, Callable\nimport numpy as np\n\nclass ImageProcessor:\n    \"\"\"\u56fe\u50cf\u5904\u7406\u5668\uff1a\u6f14\u793a\u503c\u4f20\u9012\u4e0e\u5f15\u7528\u4f20\u9012\u7684\u6743\u8861\"\"\"\n\n    def __init__(self):\n        self.filters = &#91;]\n        self.history = &#91;]\n\n    def apply_filter(self, image: np.ndarray, filter_func: Callable, \n                    inplace: bool = False, keep_history: bool = True) -&gt; np.ndarray:\n        \"\"\"\n        \u5e94\u7528\u6ee4\u955c\u5230\u56fe\u50cf\n\n        Args:\n            image: \u8f93\u5165\u56fe\u50cf\n            filter_func: \u6ee4\u955c\u51fd\u6570\n            inplace: \u662f\u5426\u539f\u5730\u4fee\u6539\uff08\u5f15\u7528\u4f20\u9012\u98ce\u683c\uff09\n            keep_history: \u662f\u5426\u4fdd\u7559\u5386\u53f2\u7248\u672c\n\n        Returns:\n            \u5904\u7406\u540e\u7684\u56fe\u50cf\n        \"\"\"\n        if inplace:\n            # \u5f15\u7528\u4f20\u9012\u98ce\u683c\uff1a\u76f4\u63a5\u4fee\u6539\u539f\u56fe\u50cf\n            result = image\n            filter_func(result)\n        else:\n            # \u503c\u4f20\u9012\u98ce\u683c\uff1a\u521b\u5efa\u526f\u672c\n            result = image.copy()\n            filter_func(result)\n\n        if keep_history:\n            self.history.append({\n                'filter': filter_func.__name__,\n                'inplace': inplace,\n                'image_shape': result.shape,\n                'image_id': id(result)\n            })\n\n        return result\n\n    def apply_pipeline(self, image: np.ndarray, \n                      filters: List&#91;Tuple&#91;Callable, bool]]) -&gt; np.ndarray:\n        \"\"\"\n        \u5e94\u7528\u4e00\u7cfb\u5217\u6ee4\u955c\n\n        Args:\n            image: \u8f93\u5165\u56fe\u50cf\n            filters: \u6ee4\u955c\u5217\u8868\uff0c\u6bcf\u4e2a\u5143\u7d20\u662f(\u6ee4\u955c\u51fd\u6570, \u662f\u5426\u539f\u5730\u5904\u7406)\n\n        Returns:\n            \u5904\u7406\u540e\u7684\u56fe\u50cf\n        \"\"\"\n        current_image = image\n\n        for filter_func, inplace in filters:\n            current_image = self.apply_filter(\n                current_image, filter_func, inplace\n            )\n\n        return current_image\n\n# \u6ee4\u955c\u51fd\u6570\u5b9a\u4e49\ndef grayscale_filter(image: np.ndarray):\n    \"\"\"\u8f6c\u6362\u4e3a\u7070\u5ea6\u56fe\uff08\u7b80\u5316\u5b9e\u73b0\uff09\"\"\"\n    if len(image.shape) == 3:\n        # \u7b80\u5355\u5e73\u5747\u6cd5\n        image&#91;:] = np.mean(image, axis=2, keepdims=True).astype(image.dtype)\n        image = np.repeat(image, 3, axis=2)\n\ndef brightness_filter(image: np.ndarray, factor: float = 1.2):\n    \"\"\"\u8c03\u6574\u4eae\u5ea6\"\"\"\n    image&#91;:] = np.clip(image * factor, 0, 255).astype(image.dtype)\n\ndef contrast_filter(image: np.ndarray, factor: float = 1.5):\n    \"\"\"\u8c03\u6574\u5bf9\u6bd4\u5ea6\"\"\"\n    mean = np.mean(image)\n    image&#91;:] = np.clip((image - mean) * factor + mean, 0, 255).astype(image.dtype)\n\ndef demonstrate_image_processing():\n    \"\"\"\u6f14\u793a\u56fe\u50cf\u5904\u7406\u6d41\u6c34\u7ebf\"\"\"\n\n    print(\"\u6a21\u62df\u56fe\u50cf\u5904\u7406\u6d41\u6c34\u7ebf\")\n\n    # \u521b\u5efa\u6a21\u62df\u56fe\u50cf\uff08100x100 RGB\uff09\n    height, width = 100, 100\n    channels = 3\n    original_image = np.random.randint(0, 256, (height, width, channels), dtype=np.uint8)\n\n    print(f\"\u539f\u59cb\u56fe\u50cf\u5f62\u72b6: {original_image.shape}\")\n    print(f\"\u539f\u59cb\u56fe\u50cf\u5185\u5b58\u5927\u5c0f: {original_image.nbytes \/ 1024:.2f} KB\")\n\n    # \u521b\u5efa\u5904\u7406\u5668\n    processor = ImageProcessor()\n\n    print(\"\\n\u65b9\u68481\uff1a\u5b8c\u5168\u503c\u4f20\u9012\uff08\u5b89\u5168\u4f46\u4f4e\u6548\uff09\")\n    filters_value_pass = &#91;\n        (lambda img: grayscale_filter(img), False),  # \u4e0d\u539f\u5730\u5904\u7406\n        (lambda img: brightness_filter(img, 1.3), False),\n        (lambda img: contrast_filter(img, 1.8), False),\n    ]\n    result_value = processor.apply_pipeline(original_image, filters_value_pass)\n\n    print(\"\\n\u65b9\u68482\uff1a\u5b8c\u5168\u5f15\u7528\u4f20\u9012\uff08\u9ad8\u6548\u4f46\u5371\u9669\uff09\")\n    image_for_ref = original_image.copy()\n    filters_ref_pass = &#91;\n        (lambda img: grayscale_filter(img), True),  # \u539f\u5730\u5904\u7406\n        (lambda img: brightness_filter(img, 1.3), True),\n        (lambda img: contrast_filter(img, 1.8), True),\n    ]\n    result_ref = processor.apply_pipeline(image_for_ref, filters_ref_pass)\n\n    print(\"\\n\u65b9\u68483\uff1a\u6df7\u5408\u7b56\u7565\uff08\u5e73\u8861\u6027\u80fd\u4e0e\u5b89\u5168\uff09\")\n    image_for_mixed = original_image.copy()\n    filters_mixed = &#91;\n        (lambda img: grayscale_filter(img), True),   # \u539f\u5730\uff1a\u7070\u5ea6\u8f6c\u6362\n        (lambda img: brightness_filter(img, 1.3), False),  # \u590d\u5236\uff1a\u4eae\u5ea6\u8c03\u6574\n        (lambda img: contrast_filter(img, 1.8), False),  # \u590d\u5236\uff1a\u5bf9\u6bd4\u5ea6\u8c03\u6574\n    ]\n    result_mixed = processor.apply_pipeline(image_for_mixed, filters_mixed)\n\ndemonstrate_image_processing()<\/code><\/pre>\n\n\n\n<p><strong>\u56fe\u50cf\u5904\u7406\u4e2d\u7684\u53c2\u6570\u4f20\u9012\u6700\u4f73\u5b9e\u8df5\uff1a<\/strong><\/p>\n\n\n\n<ol class=\"wp-block-list\">\n<li>\u4e2d\u95f4\u5904\u7406\u6b65\u9aa4\uff1a\u8003\u8651\u4f7f\u7528\u539f\u5730\u64cd\u4f5c\u4ee5\u63d0\u9ad8\u6027\u80fd<\/li>\n\n\n\n<li>\u6700\u7ec8\u8f93\u51fa\uff1a\u786e\u4fdd\u8fd4\u56de\u72ec\u7acb\u526f\u672c\uff0c\u907f\u514d\u540e\u7eed\u4fee\u6539<\/li>\n\n\n\n<li>\u5386\u53f2\u8bb0\u5f55\uff1a\u5982\u679c\u9700\u4fdd\u7559\u5904\u7406\u5386\u53f2\uff0c\u5fc5\u987b\u4fdd\u5b58\u526f\u672c<\/li>\n\n\n\n<li>\u5185\u5b58\u7ba1\u7406\uff1a\u5bf9\u4e8e\u5927\u56fe\u50cf\uff0c\u5e73\u8861\u590d\u5236\u5f00\u9500\u548c\u5185\u5b58\u4f7f\u7528<\/li>\n\n\n\n<li>API\u8bbe\u8ba1\uff1a\u63d0\u4f9binplace\u53c2\u6570\u8ba9\u8c03\u7528\u8005\u9009\u62e9\u7b56\u7565<\/li>\n\n\n\n<li>\u7ebf\u7a0b\u5b89\u5168\uff1a\u591a\u7ebf\u7a0b\u5904\u7406\u65f6\u907f\u514d\u5171\u4eab\u56fe\u50cf\u6570\u636e<\/li>\n\n\n\n<li>GPU\u52a0\u901f\uff1a\u8003\u8651\u4f7f\u7528\u96f6\u62f7\u8d1d\u6280\u672f\u4f20\u9012\u6570\u636e\u5230GPU<\/li>\n<\/ol>\n\n\n\n<p><strong>\u9879\u76ee\u6269\u5c55\u5efa\u8bae\uff1a<\/strong><\/p>\n\n\n\n<ol class=\"wp-block-list\">\n<li>\u5b9e\u73b0\u771f\u5b9e\u7684\u56fe\u50cf\u6ee4\u955c\uff08\u4f7f\u7528OpenCV\u6216PIL\uff09<\/li>\n\n\n\n<li>\u6dfb\u52a0\u64a4\u9500\/\u91cd\u505a\u529f\u80fd\uff08\u4f7f\u7528\u5907\u5fd8\u5f55\u6a21\u5f0f\uff09<\/li>\n\n\n\n<li>\u5b9e\u73b0\u5e76\u884c\u56fe\u50cf\u5904\u7406\uff08\u4f7f\u7528\u591a\u8fdb\u7a0b\uff09<\/li>\n\n\n\n<li>\u6dfb\u52a0GPU\u52a0\u901f\u652f\u6301\uff08\u4f7f\u7528CUDA\u6216OpenCL\uff09<\/li>\n\n\n\n<li>\u5b9e\u73b0\u56fe\u50cf\u5904\u7406\u811a\u672c\u8bed\u8a00\uff08DSL\uff09<\/li>\n\n\n\n<li>\u6dfb\u52a0Web\u754c\u9762\u548c\u5b9e\u65f6\u9884\u89c8<\/li>\n<\/ol>\n\n\n\n<h2 class=\"wp-block-heading\">\u7b2c\u516b\u90e8\u5206\uff1a\u5b66\u4e60\u603b\u7ed3\u4e0e\u4e0b\u4e00\u6b65<\/h2>\n\n\n\n<h3 class=\"wp-block-heading\">\u7b2c\u56db\u5341\u56db\u8bfe\uff1a\u503c\u4f20\u9012 vs \u5f15\u7528\u4f20\u9012 &#8211; \u6838\u5fc3\u603b\u7ed3<\/h3>\n\n\n\n<p><strong>\u5173\u952e\u8981\u70b9\u56de\u987e\uff1a<\/strong><\/p>\n\n\n\n<p><strong>\u4e3b\u9898\uff1a\u57fa\u672c\u6982\u5ff5<\/strong><\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>\u503c\u4f20\u9012\uff1a\u4f20\u9012\u6570\u636e\u7684\u526f\u672c\uff0c\u51fd\u6570\u5185\u4fee\u6539\u4e0d\u5f71\u54cd\u539f\u59cb\u6570\u636e<\/li>\n\n\n\n<li>\u5f15\u7528\u4f20\u9012\uff1a\u4f20\u9012\u6570\u636e\u7684\u5f15\u7528\uff0c\u51fd\u6570\u5185\u4fee\u6539\u76f4\u63a5\u5f71\u54cd\u539f\u59cb\u6570\u636e<\/li>\n\n\n\n<li>\u5bf9\u8c61\u5f15\u7528\u4f20\u9012\uff1aPython\u7b49\u8bed\u8a00\u7684\u673a\u5236\uff0c\u6839\u636e\u5bf9\u8c61\u53ef\u53d8\u6027\u8868\u73b0\u4e0d\u540c<\/li>\n<\/ul>\n\n\n\n<p><strong>\u4e3b\u9898\uff1a\u8bed\u8a00\u5dee\u5f02<\/strong><\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Python\uff1a\u5bf9\u8c61\u5f15\u7528\u4f20\u9012\uff0c\u53ef\u53d8\u5bf9\u8c61\u7c7b\u4f3c\u5f15\u7528\u4f20\u9012\uff0c\u4e0d\u53ef\u53d8\u5bf9\u8c61\u7c7b\u4f3c\u503c\u4f20\u9012<\/li>\n\n\n\n<li>Java\uff1a\u4e25\u683c\u503c\u4f20\u9012\uff0c\u5bf9\u4e8e\u5bf9\u8c61\u4f20\u9012\u5f15\u7528\u526f\u672c<\/li>\n\n\n\n<li>C++\uff1a\u652f\u6301\u503c\u4f20\u9012\u3001\u5f15\u7528\u4f20\u9012\u548c\u6307\u9488\u4f20\u9012\uff0c\u7a0b\u5e8f\u5458\u6709\u5b8c\u5168\u63a7\u5236\u6743<\/li>\n\n\n\n<li>JavaScript\uff1a\u57fa\u672c\u7c7b\u578b\u503c\u4f20\u9012\uff0c\u5bf9\u8c61\u7c7b\u578b\u4f20\u9012\u5f15\u7528\u526f\u672c<\/li>\n\n\n\n<li>Go\uff1a\u4e25\u683c\u503c\u4f20\u9012\uff0c\u4f7f\u7528\u6307\u9488\u5b9e\u73b0\u5f15\u7528\u4f20\u9012\u6548\u679c<\/li>\n<\/ul>\n\n\n\n<p><strong>\u4e3b\u9898\uff1a\u6027\u80fd\u5f71\u54cd<\/strong><\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>\u503c\u4f20\u9012\uff1a\u5b89\u5168\u4f46\u53ef\u80fd\u4f4e\u6548\uff08\u590d\u5236\u5f00\u9500\uff09<\/li>\n\n\n\n<li>\u5f15\u7528\u4f20\u9012\uff1a\u9ad8\u6548\u4f46\u53ef\u80fd\u5371\u9669\uff08\u610f\u5916\u4fee\u6539\uff09<\/li>\n\n\n\n<li>\u5927\u5bf9\u8c61\uff1a\u5f15\u7528\u4f20\u9012\u6709\u660e\u663e\u6027\u80fd\u4f18\u52bf<\/li>\n\n\n\n<li>\u4e0d\u53ef\u53d8\u5bf9\u8c61\uff1a\u4f20\u9012\u5f88\u9ad8\u6548\uff0c\u65e0\u9700\u62c5\u5fc3\u4fee\u6539<\/li>\n<\/ul>\n\n\n\n<p><strong>\u4e3b\u9898\uff1a\u8bbe\u8ba1\u8003\u91cf<\/strong><\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>\u9632\u5fa1\u6027\u7f16\u7a0b\uff1a\u521b\u5efa\u526f\u672c\u4fdd\u62a4\u539f\u59cb\u6570\u636e<\/li>\n\n\n\n<li>API\u8bbe\u8ba1\uff1a\u660e\u786e\u8bf4\u660e\u662f\u5426\u4fee\u6539\u8f93\u5165\u53c2\u6570<\/li>\n\n\n\n<li>\u5e76\u53d1\u5b89\u5168\uff1a\u503c\u4f20\u9012\u5929\u7136\u7ebf\u7a0b\u5b89\u5168\uff0c\u5f15\u7528\u4f20\u9012\u9700\u8981\u540c\u6b65<\/li>\n\n\n\n<li>\u51fd\u6570\u5f0f\u98ce\u683c\uff1a\u4f7f\u7528\u4e0d\u53ef\u53d8\u6570\u636e\u548c\u7eaf\u51fd\u6570<\/li>\n<\/ul>\n\n\n\n<p><strong>\u601d\u7ef4\u6a21\u578b\uff1a\u5982\u4f55\u9009\u62e9\u4f20\u9012\u65b9\u5f0f\uff1f<\/strong><br>\u9009\u62e9\u503c\u4f20\u9012\u8fd8\u662f\u5f15\u7528\u4f20\u9012\uff0c\u8003\u8651\u4ee5\u4e0b\u56e0\u7d20\uff1a<\/p>\n\n\n\n<ol class=\"wp-block-list\">\n<li>\u6570\u636e\u5927\u5c0f\uff1a<\/li>\n<\/ol>\n\n\n\n<ul class=\"wp-block-list\">\n<li>\u5c0f\u6570\u636e \u2192 \u503c\u4f20\u9012\uff08\u590d\u5236\u5f00\u9500\u5c0f\uff09<\/li>\n\n\n\n<li>\u5927\u6570\u636e \u2192 \u5f15\u7528\u4f20\u9012\uff08\u907f\u514d\u590d\u5236\uff09<\/li>\n<\/ul>\n\n\n\n<ol class=\"wp-block-list\">\n<li>\u4fee\u6539\u9700\u6c42\uff1a<\/li>\n<\/ol>\n\n\n\n<ul class=\"wp-block-list\">\n<li>\u4e0d\u9700\u8981\u4fee\u6539 \u2192 \u503c\u4f20\u9012\u6216const\u5f15\u7528<\/li>\n\n\n\n<li>\u9700\u8981\u4fee\u6539 \u2192 \u5f15\u7528\u4f20\u9012<\/li>\n<\/ul>\n\n\n\n<ol class=\"wp-block-list\">\n<li>\u5b89\u5168\u6027\u8981\u6c42\uff1a<\/li>\n<\/ol>\n\n\n\n<ul class=\"wp-block-list\">\n<li>\u9ad8\u5b89\u5168\u6027 \u2192 \u503c\u4f20\u9012\uff08\u4fdd\u62a4\u539f\u59cb\u6570\u636e\uff09<\/li>\n\n\n\n<li>\u53ef\u63a5\u53d7\u98ce\u9669 \u2192 \u5f15\u7528\u4f20\u9012<\/li>\n<\/ul>\n\n\n\n<ol class=\"wp-block-list\">\n<li>\u6027\u80fd\u8981\u6c42\uff1a<\/li>\n<\/ol>\n\n\n\n<ul class=\"wp-block-list\">\n<li>\u9ad8\u6027\u80fd \u2192 \u5f15\u7528\u4f20\u9012\uff08\u51cf\u5c11\u590d\u5236\uff09<\/li>\n\n\n\n<li>\u53ef\u63a5\u53d7\u5f00\u9500 \u2192 \u503c\u4f20\u9012<\/li>\n<\/ul>\n\n\n\n<ol class=\"wp-block-list\">\n<li>\u5e76\u53d1\u73af\u5883\uff1a<\/li>\n<\/ol>\n\n\n\n<ul class=\"wp-block-list\">\n<li>\u591a\u7ebf\u7a0b \u2192 \u503c\u4f20\u9012\u6216\u4e0d\u53ef\u53d8\u6570\u636e<\/li>\n\n\n\n<li>\u5355\u7ebf\u7a0b \u2192 \u53ef\u6839\u636e\u9700\u8981\u9009\u62e9<\/li>\n<\/ul>\n\n\n\n<p><strong>\u51b3\u7b56\u6846\u67b6\uff1a<\/strong><\/p>\n\n\n\n<ol class=\"wp-block-list\">\n<li>\u9996\u5148\u8003\u8651\u6570\u636e\u662f\u5426\u4f1a\u88ab\u4fee\u6539<\/li>\n\n\n\n<li>\u7136\u540e\u8003\u8651\u6570\u636e\u5927\u5c0f\u548c\u6027\u80fd\u8981\u6c42<\/li>\n\n\n\n<li>\u6700\u540e\u8003\u8651\u5e76\u53d1\u5b89\u5168\u548c\u4ee3\u7801\u6e05\u6670\u5ea6<\/li>\n<\/ol>\n\n\n\n<h3 class=\"wp-block-heading\">\u4e0b\u4e00\u6b65\u5b66\u4e60\u5efa\u8bae\uff1a<\/h3>\n\n\n\n<p><strong>\u63a8\u8350\u6df1\u5165\u5b66\u4e60\u65b9\u5411\uff1a<\/strong><\/p>\n\n\n\n<ol class=\"wp-block-list\">\n<li>\u5185\u5b58\u7ba1\u7406<\/li>\n<\/ol>\n\n\n\n<ul class=\"wp-block-list\">\n<li>\u5185\u5bb9\uff1a\u6df1\u5165\u5b66\u4e60\u5783\u573e\u56de\u6536\u3001\u5185\u5b58\u5206\u914d\u3001\u5185\u5b58\u6cc4\u6f0f\u68c0\u6d4b<\/li>\n\n\n\n<li>\u8d44\u6e90\uff1a\u300a\u6df1\u5165\u7406\u89e3\u8ba1\u7b97\u673a\u7cfb\u7edf\u300b\u5185\u5b58\u7ba1\u7406\u7ae0\u8282<\/li>\n<\/ul>\n\n\n\n<ol class=\"wp-block-list\">\n<li>\u5e76\u53d1\u7f16\u7a0b<\/li>\n<\/ol>\n\n\n\n<ul class=\"wp-block-list\">\n<li>\u5185\u5bb9\uff1a\u5b66\u4e60\u7ebf\u7a0b\u3001\u8fdb\u7a0b\u3001\u9501\u3001\u539f\u5b50\u64cd\u4f5c\u3001\u5e76\u53d1\u6570\u636e\u7ed3\u6784<\/li>\n\n\n\n<li>\u8d44\u6e90\uff1a\u300aJava\u5e76\u53d1\u7f16\u7a0b\u5b9e\u6218\u300b\u6216\u300aPython\u5e76\u53d1\u7f16\u7a0b\u300b<\/li>\n<\/ul>\n\n\n\n<ol class=\"wp-block-list\">\n<li>\u51fd\u6570\u5f0f\u7f16\u7a0b<\/li>\n<\/ol>\n\n\n\n<ul class=\"wp-block-list\">\n<li>\u5185\u5bb9\uff1a\u6df1\u5165\u4e0d\u53ef\u53d8\u6570\u636e\u3001\u7eaf\u51fd\u6570\u3001\u9ad8\u9636\u51fd\u6570\u3001\u51fd\u6570\u7ec4\u5408<\/li>\n\n\n\n<li>\u8d44\u6e90\uff1a\u300a\u51fd\u6570\u5f0f\u7f16\u7a0b\u601d\u7ef4\u300b\u6216\u300aScala\u51fd\u6570\u5f0f\u7f16\u7a0b\u300b<\/li>\n<\/ul>\n\n\n\n<ol class=\"wp-block-list\">\n<li>\u7cfb\u7edf\u8bbe\u8ba1<\/li>\n<\/ol>\n\n\n\n<ul class=\"wp-block-list\">\n<li>\u5185\u5bb9\uff1a\u5b66\u4e60\u5206\u5e03\u5f0f\u7cfb\u7edf\u3001\u5fae\u670d\u52a1\u3001API\u8bbe\u8ba1\u4e2d\u7684\u6570\u636e\u4f20\u8f93<\/li>\n\n\n\n<li>\u8d44\u6e90\uff1a\u300a\u8bbe\u8ba1\u6570\u636e\u5bc6\u96c6\u578b\u5e94\u7528\u300b<\/li>\n<\/ul>\n\n\n\n<ol class=\"wp-block-list\">\n<li>\u6027\u80fd\u4f18\u5316<\/li>\n<\/ol>\n\n\n\n<ul class=\"wp-block-list\">\n<li>\u5185\u5bb9\uff1a\u5b66\u4e60\u6027\u80fd\u5206\u6790\u3001\u5185\u5b58\u4f18\u5316\u3001CPU\u7f13\u5b58\u4f18\u5316<\/li>\n\n\n\n<li>\u8d44\u6e90\uff1a\u300a\u6027\u80fd\u4e4b\u5dc5\u300b\u6216\u300a\u9ad8\u6027\u80fdMySQL\u300b<\/li>\n<\/ul>\n\n\n\n<ol class=\"wp-block-list\">\n<li>\u8bed\u8a00\u6df1\u5165<\/li>\n<\/ol>\n\n\n\n<ul class=\"wp-block-list\">\n<li>\u5185\u5bb9\uff1a\u6df1\u5165\u7814\u7a76\u4f60\u4e3b\u8981\u4f7f\u7528\u8bed\u8a00\u7684\u5185\u90e8\u673a\u5236<\/li>\n\n\n\n<li>\u8d44\u6e90\uff1a\u300aPython\u6e90\u7801\u5256\u6790\u300b\u6216\u300a\u6df1\u5165\u7406\u89e3Java\u865a\u62df\u673a\u300b<\/li>\n<\/ul>\n\n\n\n<p><strong>\u5b9e\u8df5\u9879\u76ee\uff08\u5de9\u56fa\u6240\u5b66\u77e5\u8bc6\uff09\uff1a<\/strong><\/p>\n\n\n\n<ol class=\"wp-block-list\">\n<li>\u5b9e\u73b0\u4e00\u4e2a\u652f\u6301\u64a4\u9500\/\u91cd\u505a\u7684\u6587\u672c\u7f16\u8f91\u5668\uff08\u5e94\u7528\u5907\u5fd8\u5f55\u6a21\u5f0f\uff09<\/li>\n\n\n\n<li>\u6784\u5efa\u4e00\u4e2a\u5e76\u53d1\u5b89\u5168\u7684\u7f13\u5b58\u7cfb\u7edf\uff08\u5e94\u7528\u503c\u4f20\u9012\u548c\u7ebf\u7a0b\u5b89\u5168\uff09<\/li>\n\n\n\n<li>\u5f00\u53d1\u4e00\u4e2a\u56fe\u50cf\u5904\u7406\u5e93\uff08\u5e73\u8861\u6027\u80fd\u4e0e\u5b89\u5168\u6027\uff09<\/li>\n\n\n\n<li>\u521b\u5efa\u4e00\u4e2a\u6570\u636e\u6d41\u6c34\u7ebf\u6846\u67b6\uff08\u5e94\u7528\u51fd\u6570\u5f0f\u7f16\u7a0b\uff09<\/li>\n\n\n\n<li>\u5b9e\u73b0\u4e00\u4e2a\u7b80\u5355\u7684\u6570\u636e\u5e93\u5f15\u64ce\uff08\u5b66\u4e60\u5185\u5b58\u7ba1\u7406\u548c\u6570\u636e\u4f20\u9012\uff09<\/li>\n\n\n\n<li>\u6784\u5efa\u4e00\u4e2a\u5fae\u670d\u52a1\u901a\u4fe1\u6846\u67b6\uff08\u5b66\u4e60\u7f51\u7edc\u6570\u636e\u4f20\u8f93\uff09<\/li>\n<\/ol>\n\n\n\n<p><strong>\u6700\u7ec8\u601d\u8003\uff1a<\/strong><\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>\u503c\u4f20\u9012\u548c\u5f15\u7528\u4f20\u9012\u4e0d\u662f\u5bf9\u7acb\u7684\uff0c\u800c\u662f\u5de5\u5177<\/li>\n\n\n\n<li>\u597d\u7684\u7a0b\u5e8f\u5458\u77e5\u9053\u5728\u4ec0\u4e48\u573a\u666f\u4f7f\u7528\u4ec0\u4e48\u5de5\u5177<\/li>\n\n\n\n<li>\u7406\u89e3\u6570\u636e\u5982\u4f55\u5728\u7cfb\u7edf\u4e2d\u6d41\u52a8\u662f\u6784\u5efa\u53ef\u9760\u8f6f\u4ef6\u7684\u57fa\u7840<\/li>\n\n\n\n<li>\u5728\u6027\u80fd\u548c\u5b89\u5168\u4e4b\u95f4\u627e\u5230\u5e73\u8861\u662f\u8f6f\u4ef6\u5de5\u7a0b\u7684\u827a\u672f<\/li>\n\n\n\n<li>\u4e0d\u65ad\u5b66\u4e60\u548c\u5b9e\u8df5\uff0c\u4f60\u4f1a\u9010\u6e10\u5f62\u6210\u81ea\u5df1\u7684\u8bbe\u8ba1\u76f4\u89c9<\/li>\n<\/ul>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<p><strong>\u7b2c\u56db\u5341\u56db\u8bfe\uff1a\u503c\u4f20\u9012 vs \u5f15\u7528\u4f20\u9012\u7684\u6df1\u5ea6\u89e3\u6790\uff01\u5b8c<\/strong><\/p>\n\n\n\n<h2 class=\"wp-block-heading\">\u7b2c\u56db\u5341\u4e94\u8bfe\uff1a\u9762\u5411\u5bf9\u8c61\u4e2d\u5bf9\u8c61\u751f\u547d\u5468\u671f\u7ba1\u7406\u6df1\u5ea6\u89e3\u6790<\/h2>\n\n\n\n<h2 class=\"wp-block-heading\">\u524d\u8a00\uff1a\u5bf9\u8c61\u751f\u547d\u5468\u671f\u7684\u54f2\u5b66<\/h2>\n\n\n\n<p>\u5728\u9762\u5411\u5bf9\u8c61\u7f16\u7a0b\u4e2d\uff0c\u7406\u89e3\u5bf9\u8c61\u7684\u751f\u547d\u5468\u671f\u5982\u540c\u7406\u89e3\u81ea\u7136\u754c\u7684\u751f\u6b7b\u8f6e\u56de\u3002\u4e00\u4e2a\u5bf9\u8c61\u4ece\u8bde\u751f\u5230\u6d88\u4ea1\u7684\u5b8c\u6574\u8fc7\u7a0b\uff0c\u4f53\u73b0\u4e86\u8ba1\u7b97\u673a\u5185\u5b58\u7ba1\u7406\u7684\u667a\u6167\uff0c\u4e5f\u53cd\u6620\u4e86\u7f16\u7a0b\u8bed\u8a00\u8bbe\u8ba1\u54f2\u5b66\u7684\u7cbe\u9ad3\u3002\u5bf9\u8c61\u751f\u547d\u5468\u671f\u7ba1\u7406\u4e0d\u4ec5\u662f\u6280\u672f\u95ee\u9898\uff0c\u66f4\u662f\u4e00\u79cd\u7cfb\u7edf\u8bbe\u8ba1\u601d\u7ef4\uff0c\u5b83\u5173\u7cfb\u5230\u7a0b\u5e8f\u7684\u6027\u80fd\u3001\u7a33\u5b9a\u6027\u548c\u53ef\u7ef4\u62a4\u6027\u3002<\/p>\n\n\n\n<p>\u4eca\u5929\uff0c\u6211\u4eec\u5c06\u6df1\u5165\u63a2\u8ba8\u5bf9\u8c61\u751f\u547d\u5468\u671f\u7ba1\u7406\u7684\u4e09\u4e2a\u6838\u5fc3\u65b9\u9762\uff1a\u6784\u9020\u65b9\u6cd5\u3001\u6790\u6784\u65b9\u6cd5\u4ee5\u53ca\u5783\u573e\u56de\u6536\u673a\u5236\u3002\u901a\u8fc7\u8fd9\u4e9b\u77e5\u8bc6\uff0c\u4f60\u5c06\u80fd\u591f\u7f16\u5199\u66f4\u5065\u58ee\u3001\u66f4\u9ad8\u6548\u7684\u9762\u5411\u5bf9\u8c61\u7a0b\u5e8f\u3002<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">\u7b2c\u4e00\u90e8\u5206\uff1a\u6784\u9020\u65b9\u6cd5 &#8211; \u5bf9\u8c61\u7684\u8bde\u751f<\/h2>\n\n\n\n<h3 class=\"wp-block-heading\">1.1 \u4ec0\u4e48\u662f\u6784\u9020\u65b9\u6cd5\uff1f<\/h3>\n\n\n\n<p>\u6784\u9020\u65b9\u6cd5\uff08Constructor\uff09\u662f\u5728\u521b\u5efa\u5bf9\u8c61\u65f6\u81ea\u52a8\u8c03\u7528\u7684\u7279\u6b8a\u65b9\u6cd5\uff0c\u7528\u4e8e\u521d\u59cb\u5316\u65b0\u521b\u5efa\u7684\u5bf9\u8c61\u3002\u5b83\u662f\u5bf9\u8c61\u751f\u547d\u5468\u671f\u7684\u8d77\u70b9\uff0c\u8d1f\u8d23\uff1a<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>\u4e3a\u5bf9\u8c61\u5206\u914d\u5fc5\u8981\u7684\u8d44\u6e90<\/li>\n\n\n\n<li>\u521d\u59cb\u5316\u5bf9\u8c61\u7684\u5c5e\u6027\uff08\u5b57\u6bb5\uff09<\/li>\n\n\n\n<li>\u5efa\u7acb\u5bf9\u8c61\u7684\u4e0d\u53d8\u5f0f\uff08invariants\uff09<\/li>\n\n\n\n<li>\u6267\u884c\u5fc5\u8981\u7684\u9a8c\u8bc1\u548c\u8bbe\u7f6e<\/li>\n<\/ul>\n\n\n\n<p>\u6784\u9020\u65b9\u6cd5\u7684\u6838\u5fc3\u804c\u8d23\u662f\u786e\u4fdd\u5bf9\u8c61\u5728\u521b\u5efa\u540e\u5904\u4e8e\u4e00\u4e2a<strong>\u6709\u6548\u4e14\u4e00\u81f4\u7684\u72b6\u6001<\/strong>\u3002<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">1.2 \u6784\u9020\u65b9\u6cd5\u7684\u7c7b\u578b\u4e0e\u6a21\u5f0f<\/h3>\n\n\n\n<pre class=\"wp-block-code\"><code># ============================================================================\n# \u6784\u9020\u65b9\u6cd5\u793a\u4f8b\uff1aPython\n# ============================================================================\n\nclass Person:\n    \"\"\"\u57fa\u672c\u6784\u9020\u65b9\u6cd5\u793a\u4f8b\"\"\"\n\n    # 1. \u9ed8\u8ba4\u6784\u9020\u65b9\u6cd5\uff08\u65e0\u53c2\u6570\uff09\n    def __init__(self):\n        self.name = \"\u65e0\u540d\u6c0f\"\n        self.age = 0\n        print(f\"\u9ed8\u8ba4\u6784\u9020\uff1a\u521b\u5efa\u4e86{self}\")\n\n    # 2. \u5e26\u53c2\u6570\u7684\u6784\u9020\u65b9\u6cd5\n    def __init__(self, name: str, age: int):\n        self.name = name\n        self.age = age\n        print(f\"\u53c2\u6570\u5316\u6784\u9020\uff1a\u521b\u5efa\u4e86{self}\")\n\n    # 3. \u591a\u6784\u9020\u65b9\u6cd5\u6a21\u5f0f\uff08\u901a\u8fc7\u7c7b\u65b9\u6cd5\u5b9e\u73b0\uff09\n    @classmethod\n    def from_birth_year(cls, name: str, birth_year: int):\n        \"\"\"\u901a\u8fc7\u51fa\u751f\u5e74\u4efd\u521b\u5efaPerson\"\"\"\n        from datetime import datetime\n        current_year = datetime.now().year\n        age = current_year - birth_year\n        return cls(name, age)\n\n    @classmethod\n    def from_dict(cls, data: dict):\n        \"\"\"\u4ece\u5b57\u5178\u521b\u5efaPerson\"\"\"\n        return cls(data.get(\"name\", \"\u672a\u77e5\"), data.get(\"age\", 0))\n\n    def __str__(self):\n        return f\"Person(name='{self.name}', age={self.age})\"\n\n# \u6784\u9020\u65b9\u6cd5\u4f7f\u7528\u793a\u4f8b\nprint(\"=== \u6784\u9020\u65b9\u6cd5\u6f14\u793a ===\")\n\n# \u4f7f\u7528\u4e3b\u6784\u9020\u65b9\u6cd5\nperson1 = Person(\"\u5f20\u4e09\", 25)  # \u8f93\u51fa\uff1a\u53c2\u6570\u5316\u6784\u9020\uff1a\u521b\u5efa\u4e86Person(name='\u5f20\u4e09', age=25)\n\n# \u4f7f\u7528\u5de5\u5382\u65b9\u6cd5\uff08\u7c7b\u65b9\u6cd5\uff09\nperson2 = Person.from_birth_year(\"\u674e\u56db\", 1995)  # \u5047\u8bbe\u5f53\u524d\u662f2024\u5e74\nprint(person2)  # \u8f93\u51fa\uff1aPerson(name='\u674e\u56db', age=29)\n\n# \u4f7f\u7528\u5b57\u5178\u6784\u9020\ndata = {\"name\": \"\u738b\u4e94\", \"age\": 30}\nperson3 = Person.from_dict(data)\nprint(person3)  # \u8f93\u51fa\uff1aPerson(name='\u738b\u4e94', age=30)<\/code><\/pre>\n\n\n\n<h3 class=\"wp-block-heading\">1.3 \u6784\u9020\u94fe\u4e0e\u7ee7\u627f\u4e2d\u7684\u6784\u9020<\/h3>\n\n\n\n<pre class=\"wp-block-code\"><code># ============================================================================\n# \u7ee7\u627f\u4e2d\u7684\u6784\u9020\u65b9\u6cd5\n# ============================================================================\n\nclass Animal:\n    \"\"\"\u57fa\u7c7b\u6784\u9020\u65b9\u6cd5\"\"\"\n\n    def __init__(self, name: str):\n        self.name = name\n        self.is_alive = True\n        print(f\"Animal.__init__: \u521b\u5efa\u52a8\u7269 {self.name}\")\n\n    def speak(self):\n        return \"???\"\n\nclass Dog(Animal):\n    \"\"\"\u6d3e\u751f\u7c7b\u6784\u9020\u65b9\u6cd5\"\"\"\n\n    def __init__(self, name: str, breed: str):\n        # 1. \u8c03\u7528\u7236\u7c7b\u6784\u9020\u65b9\u6cd5\uff08\u5fc5\u987b\uff01\uff09\n        super().__init__(name)\n\n        # 2. \u521d\u59cb\u5316\u6d3e\u751f\u7c7b\u7279\u6709\u5c5e\u6027\n        self.breed = breed\n        self.energy = 100\n        print(f\"Dog.__init__: \u521b\u5efa{self.breed}\u54c1\u79cd\u7684\u72d7 {self.name}\")\n\n    def speak(self):\n        return \"\u6c6a\u6c6a\uff01\"\n\n    def __str__(self):\n        return f\"Dog(name='{self.name}', breed='{self.breed}', energy={self.energy})\"\n\nclass Cat(Animal):\n    \"\"\"\u6d3e\u751f\u7c7b\u6784\u9020\u65b9\u6cd5\uff08\u7b80\u5316\u7248\uff09\"\"\"\n\n    def __init__(self, name: str):\n        # \u4f7f\u7528*args, **kwargs\u4f20\u9012\u53c2\u6570\n        super().__init__(name)\n        self.lives = 9\n        print(f\"Cat.__init__: \u521b\u5efa\u732b {self.name}\uff0c\u6709{self.lives}\u6761\u547d\")\n\n    def speak(self):\n        return \"\u55b5\u55b5\uff5e\"\n\n# \u6d4b\u8bd5\u7ee7\u627f\u6784\u9020\u94fe\nprint(\"\\n=== \u7ee7\u627f\u6784\u9020\u94fe\u6f14\u793a ===\")\n\nmy_dog = Dog(\"\u65fa\u8d22\", \"\u91d1\u6bdb\")\n# \u8f93\u51fa\uff1a\n# Animal.__init__: \u521b\u5efa\u52a8\u7269 \u65fa\u8d22\n# Dog.__init__: \u521b\u5efa\u91d1\u6bdb\u54c1\u79cd\u7684\u72d7 \u65fa\u8d22\n\nmy_cat = Cat(\"\u54aa\u54aa\")\n# \u8f93\u51fa\uff1a\n# Animal.__init__: \u521b\u5efa\u52a8\u7269 \u54aa\u54aa\n# Cat.__init__: \u521b\u5efa\u732b \u54aa\u54aa\uff0c\u67099\u6761\u547d\n\nprint(f\"\\n\u72d7\u72d7\u8bf4\u8bdd: {my_dog.speak()}\")\nprint(f\"\u732b\u54aa\u8bf4\u8bdd: {my_cat.speak()}\")<\/code><\/pre>\n\n\n\n<h3 class=\"wp-block-heading\">1.4 \u6784\u9020\u65b9\u6cd5\u7684\u6700\u4f73\u5b9e\u8df5<\/h3>\n\n\n\n<pre class=\"wp-block-code\"><code># ============================================================================\n# \u6784\u9020\u65b9\u6cd5\u6700\u4f73\u5b9e\u8df5\n# ============================================================================\n\nclass DatabaseConnection:\n    \"\"\"\u6570\u636e\u5e93\u8fde\u63a5\u793a\u4f8b\uff1a\u5c55\u793a\u6784\u9020\u65b9\u6cd5\u6700\u4f73\u5b9e\u8df5\"\"\"\n\n    def __init__(self, host: str, port: int, username: str, password: str, \n                 database: str, max_connections: int = 10, timeout: int = 30):\n        \"\"\"\n        \u6784\u9020\u65b9\u6cd5\u6700\u4f73\u5b9e\u8df5\u793a\u4f8b\n\n        \u539f\u52191\uff1a\u53c2\u6570\u9a8c\u8bc1\uff08\u786e\u4fdd\u6709\u6548\u6027\uff09\n        \u539f\u52192\uff1a\u8bbe\u7f6e\u9ed8\u8ba4\u503c\uff08\u63d0\u9ad8\u6613\u7528\u6027\uff09\n        \u539f\u52193\uff1a\u660e\u786e\u6587\u6863\uff08\u8bf4\u660e\u53c2\u6570\u542b\u4e49\uff09\n        \u539f\u52194\uff1a\u5355\u4e00\u804c\u8d23\uff08\u53ea\u505a\u521d\u59cb\u5316\uff09\n        \"\"\"\n\n        # \u53c2\u6570\u9a8c\u8bc1\n        if not host:\n            raise ValueError(\"\u4e3b\u673a\u540d\u4e0d\u80fd\u4e3a\u7a7a\")\n        if not (0 &lt; port &lt; 65536):\n            raise ValueError(\"\u7aef\u53e3\u5fc5\u987b\u57281-65535\u4e4b\u95f4\")\n        if max_connections &lt;= 0:\n            raise ValueError(\"\u6700\u5927\u8fde\u63a5\u6570\u5fc5\u987b\u5927\u4e8e0\")\n\n        # \u521d\u59cb\u5316\u57fa\u672c\u5c5e\u6027\n        self.host = host\n        self.port = port\n        self.username = username\n        self.password = password\n        self.database = database\n\n        # \u8bbe\u7f6e\u53ef\u9009\u53c2\u6570\n        self.max_connections = max_connections\n        self.timeout = timeout\n\n        # \u521d\u59cb\u5316\u72b6\u6001\u5c5e\u6027\n        self.is_connected = False\n        self.connection_count = 0\n        self.last_activity = None\n\n        # \u521d\u59cb\u5316\u8d44\u6e90\uff08\u4f46\u4e0d\u5728\u6784\u9020\u65b9\u6cd5\u4e2d\u6267\u884c\u590d\u6742\u64cd\u4f5c\uff09\n        self._connection_pool = &#91;]\n\n        # \u8bb0\u5f55\u65e5\u5fd7\n        print(f\"\u6570\u636e\u5e93\u8fde\u63a5\u5bf9\u8c61\u5df2\u521b\u5efa\uff1a{self}\")\n\n        # \u6ce8\u610f\uff1a\u4e0d\u5728\u6784\u9020\u65b9\u6cd5\u4e2d\u6267\u884c\u53ef\u80fd\u5931\u8d25\u7684\u64cd\u4f5c\n        # \u6bd4\u5982\u5b9e\u9645\u8fde\u63a5\u6570\u636e\u5e93\u5e94\u8be5\u653e\u5728\u4e13\u95e8\u7684connect()\u65b9\u6cd5\u4e2d\n\n    def connect(self):\n        \"\"\"\u5b9e\u9645\u7684\u8fde\u63a5\u64cd\u4f5c\uff08\u5ef6\u8fdf\u521d\u59cb\u5316\uff09\"\"\"\n        if not self.is_connected:\n            # \u6a21\u62df\u8fde\u63a5\u6570\u636e\u5e93\n            self.is_connected = True\n            print(f\"\u5df2\u8fde\u63a5\u5230 {self.host}:{self.port}\/{self.database}\")\n        return self.is_connected\n\n    def __str__(self):\n        return f\"DatabaseConnection(host='{self.host}', database='{self.database}')\"\n\nclass ImmutablePoint:\n    \"\"\"\u4e0d\u53ef\u53d8\u5bf9\u8c61\u6784\u9020\u65b9\u6cd5\u793a\u4f8b\"\"\"\n\n    def __init__(self, x: float, y: float):\n        # \u4e0d\u53ef\u53d8\u5bf9\u8c61\uff1a\u6240\u6709\u5c5e\u6027\u90fd\u5e94\u8be5\u662f\u53ea\u8bfb\u7684\n        self._x = x\n        self._y = y\n\n    # \u4f7f\u7528property\u5b9e\u73b0\u53ea\u8bfb\u8bbf\u95ee\n    @property\n    def x(self):\n        return self._x\n\n    @property\n    def y(self):\n        return self._y\n\n    def __repr__(self):\n        return f\"Point({self.x}, {self.y})\"\n\n# \u6d4b\u8bd5\u6700\u4f73\u5b9e\u8df5\nprint(\"\\n=== \u6784\u9020\u65b9\u6cd5\u6700\u4f73\u5b9e\u8df5\u6f14\u793a ===\")\n\ntry:\n    # \u521b\u5efa\u6570\u636e\u5e93\u8fde\u63a5\u5bf9\u8c61\n    db = DatabaseConnection(\n        host=\"localhost\",\n        port=3306,\n        username=\"admin\",\n        password=\"secret\",\n        database=\"mydb\"\n    )\n\n    # \u5ef6\u8fdf\u8fde\u63a5\n    db.connect()\n\n    # \u6d4b\u8bd5\u4e0d\u53ef\u53d8\u5bf9\u8c61\n    point = ImmutablePoint(3.5, 4.2)\n    print(f\"\u4e0d\u53ef\u53d8\u70b9: {point}\")\n    print(f\"\u70b9\u7684x\u5750\u6807: {point.x}\")\n\n    # \u5c1d\u8bd5\u4fee\u6539\u4f1a\u5931\u8d25\n    # point.x = 5.0  # \u8fd9\u4f1a\u5bfc\u81f4AttributeError\n\nexcept ValueError as e:\n    print(f\"\u53c2\u6570\u9519\u8bef: {e}\")<\/code><\/pre>\n\n\n\n<p>\u6784\u9020\u65b9\u6cd5\u8bbe\u8ba1\u539f\u5219\u603b\u7ed3\uff1a<\/p>\n\n\n\n<ol class=\"wp-block-list\">\n<li><strong>\u5b8c\u6574\u6027\u539f\u5219<\/strong>\uff1a\u6784\u9020\u5b8c\u6210\u540e\u5bf9\u8c61\u5e94\u5904\u4e8e\u5b8c\u6574\u53ef\u7528\u72b6\u6001<\/li>\n\n\n\n<li><strong>\u9a8c\u8bc1\u539f\u5219<\/strong>\uff1a\u5728\u6784\u9020\u65b9\u6cd5\u4e2d\u9a8c\u8bc1\u53c2\u6570\u6709\u6548\u6027<\/li>\n\n\n\n<li><strong>\u7b80\u5355\u539f\u5219<\/strong>\uff1a\u6784\u9020\u65b9\u6cd5\u5e94\u5c3d\u91cf\u7b80\u5355\uff0c\u907f\u514d\u590d\u6742\u903b\u8f91<\/li>\n\n\n\n<li><strong>\u5ef6\u8fdf\u539f\u5219<\/strong>\uff1a\u6602\u8d35\u7684\u8d44\u6e90\u83b7\u53d6\u53ef\u4ee5\u5ef6\u8fdf\u5230\u4e13\u95e8\u7684\u65b9\u6cd5<\/li>\n\n\n\n<li><strong>\u5b89\u5168\u539f\u5219<\/strong>\uff1a\u8003\u8651\u5bf9\u8c61\u7684\u4e0d\u53ef\u53d8\u6027\u9700\u6c42<\/li>\n\n\n\n<li><strong>\u6587\u6863\u539f\u5219<\/strong>\uff1a\u6e05\u6670\u8bb0\u5f55\u6bcf\u4e2a\u53c2\u6570\u7684\u542b\u4e49\u548c\u8981\u6c42<\/li>\n<\/ol>\n\n\n\n<h2 class=\"wp-block-heading\">\u7b2c\u4e8c\u90e8\u5206\uff1a\u6790\u6784\u65b9\u6cd5 &#8211; \u5bf9\u8c61\u7684\u6d88\u4ea1<\/h2>\n\n\n\n<h3 class=\"wp-block-heading\">2.1 \u4ec0\u4e48\u662f\u6790\u6784\u65b9\u6cd5\uff1f<\/h3>\n\n\n\n<p>\u6790\u6784\u65b9\u6cd5\uff08Destructor\uff09\u662f\u5728\u5bf9\u8c61\u88ab\u9500\u6bc1\u65f6\u81ea\u52a8\u8c03\u7528\u7684\u7279\u6b8a\u65b9\u6cd5\uff0c\u7528\u4e8e\u6e05\u7406\u5bf9\u8c61\u5360\u7528\u7684\u8d44\u6e90\u3002\u5b83\u662f\u5bf9\u8c61\u751f\u547d\u5468\u671f\u7684\u7ec8\u70b9\uff0c\u8d1f\u8d23\uff1a<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>\u91ca\u653e\u5bf9\u8c61\u6301\u6709\u7684\u5916\u90e8\u8d44\u6e90\uff08\u6587\u4ef6\u3001\u7f51\u7edc\u8fde\u63a5\u3001\u6570\u636e\u5e93\u8fde\u63a5\u7b49\uff09<\/li>\n\n\n\n<li>\u6e05\u7406\u5bf9\u8c61\u5206\u914d\u7684\u5185\u5b58<\/li>\n\n\n\n<li>\u6267\u884c\u5fc5\u8981\u7684\u6e05\u7406\u64cd\u4f5c<\/li>\n\n\n\n<li>\u8bb0\u5f55\u5bf9\u8c61\u9500\u6bc1\u7684\u65e5\u5fd7<\/li>\n<\/ul>\n\n\n\n<p>\u6790\u6784\u65b9\u6cd5\u7684\u6838\u5fc3\u804c\u8d23\u662f\u786e\u4fdd\u5bf9\u8c61<strong>\u4f18\u96c5\u5730\u91ca\u653e\u6240\u6709\u8d44\u6e90<\/strong>\uff0c\u907f\u514d\u8d44\u6e90\u6cc4\u6f0f\u3002<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">2.2 \u6790\u6784\u65b9\u6cd5\u7684\u5de5\u4f5c\u539f\u7406<\/h3>\n\n\n\n<pre class=\"wp-block-code\"><code># ============================================================================\n# \u6790\u6784\u65b9\u6cd5\u793a\u4f8b\uff1aPython\n# ============================================================================\n\nclass ResourceHolder:\n    \"\"\"\u8d44\u6e90\u6301\u6709\u8005\u793a\u4f8b\"\"\"\n\n    def __init__(self, name: str):\n        self.name = name\n        self.resources = &#91;]\n        print(f\"&#91;\u6784\u9020] ResourceHolder '{self.name}' \u88ab\u521b\u5efa\")\n\n    def acquire_resource(self, resource_name: str):\n        \"\"\"\u83b7\u53d6\u8d44\u6e90\uff08\u6a21\u62df\uff09\"\"\"\n        self.resources.append(resource_name)\n        print(f\"&#91;\u64cd\u4f5c] {self.name} \u83b7\u53d6\u4e86\u8d44\u6e90: {resource_name}\")\n        return f\"{resource_name}_handle\"\n\n    def __del__(self):\n        \"\"\"\n        \u6790\u6784\u65b9\u6cd5\uff08Python\u4e2d\u7684__del__\uff09\n        \u6ce8\u610f\uff1a__del__\u7684\u8c03\u7528\u65f6\u673a\u4e0d\u786e\u5b9a\uff0c\u4e0d\u80fd\u4f9d\u8d56\u5b83\u8fdb\u884c\u91cd\u8981\u8d44\u6e90\u6e05\u7406\uff01\n        \"\"\"\n        # \u6e05\u7406\u8d44\u6e90\n        if self.resources:\n            print(f\"&#91;\u6790\u6784] {self.name} \u6b63\u5728\u91ca\u653e\u8d44\u6e90: {self.resources}\")\n        else:\n            print(f\"&#91;\u6790\u6784] {self.name} \u88ab\u9500\u6bc1\")\n\n        # \u5728\u5b9e\u9645\u5e94\u7528\u4e2d\uff0c\u8fd9\u91cc\u5e94\u8be5\uff1a\n        # 1. \u5173\u95ed\u6587\u4ef6\n        # 2. \u5173\u95ed\u6570\u636e\u5e93\u8fde\u63a5\n        # 3. \u91ca\u653e\u7f51\u7edc\u8fde\u63a5\n        # 4. \u6e05\u7406\u7f13\u5b58\u7b49\n\nclass FileHandler:\n    \"\"\"\u6587\u4ef6\u5904\u7406\u5668\u793a\u4f8b\uff1a\u5c55\u793a\u6b63\u786e\u7684\u8d44\u6e90\u6e05\u7406\"\"\"\n\n    def __init__(self, filename: str, mode: str = \"r\"):\n        self.filename = filename\n        self.mode = mode\n        self._file = None  # \u5ef6\u8fdf\u6253\u5f00\n\n    def open(self):\n        \"\"\"\u6253\u5f00\u6587\u4ef6\"\"\"\n        if self._file is None:\n            self._file = open(self.filename, self.mode)\n            print(f\"\u6587\u4ef6 {self.filename} \u5df2\u6253\u5f00\")\n        return self._file\n\n    def close(self):\n        \"\"\"\u663e\u5f0f\u5173\u95ed\u6587\u4ef6\uff08\u63a8\u8350\u65b9\u5f0f\uff09\"\"\"\n        if self._file is not None:\n            self._file.close()\n            self._file = None\n            print(f\"\u6587\u4ef6 {self.filename} \u5df2\u5173\u95ed\")\n\n    def __enter__(self):\n        \"\"\"\u4e0a\u4e0b\u6587\u7ba1\u7406\u5668\u534f\u8bae\uff1a\u8fdb\u5165\u65f6\u6253\u5f00\u6587\u4ef6\"\"\"\n        return self.open()\n\n    def __exit__(self, exc_type, exc_val, exc_tb):\n        \"\"\"\u4e0a\u4e0b\u6587\u7ba1\u7406\u5668\u534f\u8bae\uff1a\u9000\u51fa\u65f6\u5173\u95ed\u6587\u4ef6\"\"\"\n        self.close()\n        return False  # \u4e0d\u6291\u5236\u5f02\u5e38\n\n    def __del__(self):\n        \"\"\"\u6790\u6784\u65b9\u6cd5\uff1a\u4f5c\u4e3a\u6700\u540e\u7684\u5b89\u5168\u7f51\"\"\"\n        if self._file is not None:\n            print(f\"\u8b66\u544a\uff1a\u6587\u4ef6 {self.filename} \u5728\u6790\u6784\u65f6\u4ecd\u5904\u4e8e\u6253\u5f00\u72b6\u6001\uff01\")\n            self.close()\n\n# \u6790\u6784\u65b9\u6cd5\u6f14\u793a\nprint(\"=== \u6790\u6784\u65b9\u6cd5\u6f14\u793a ===\")\n\n# \u521b\u5efa\u5bf9\u8c61\nholder1 = ResourceHolder(\"Holder1\")\nholder1.acquire_resource(\"\u6570\u636e\u5e93\u8fde\u63a5\")\nholder1.acquire_resource(\"\u7f51\u7edc\u5957\u63a5\u5b57\")\n\n# \u5220\u9664\u5f15\u7528\nprint(\"\\n\u5220\u9664\u5f15\u7528...\")\ndel holder1\n\n# \u5f3a\u5236\u5783\u573e\u56de\u6536\uff08\u6f14\u793a\u7528\uff0c\u901a\u5e38\u4e0d\u9700\u8981\u624b\u52a8\u8c03\u7528\uff09\nimport gc\ngc.collect()\n\nprint(\"\\n=== \u6b63\u786e\u7684\u8d44\u6e90\u7ba1\u7406 ===\")\n\n# \u9519\u8bef\u7684\u65b9\u5f0f\uff1a\u4f9d\u8d56\u6790\u6784\u65b9\u6cd5\nprint(\"\u9519\u8bef\u65b9\u5f0f\uff1a\u4f9d\u8d56\u6790\u6784\u65b9\u6cd5\")\nbad_handler = FileHandler(\"test.txt\", \"w\")\nbad_handler.open()\n# \u5fd8\u8bb0\u8c03\u7528close()\uff0c\u4f9d\u8d56__del__\n\n# \u6b63\u786e\u7684\u65b9\u5f0f1\uff1a\u663e\u5f0f\u6e05\u7406\nprint(\"\\n\u6b63\u786e\u65b9\u5f0f1\uff1a\u663e\u5f0f\u6e05\u7406\")\nhandler1 = FileHandler(\"test1.txt\", \"w\")\nhandler1.open()\nhandler1.close()  # \u663e\u5f0f\u5173\u95ed\n\n# \u6b63\u786e\u7684\u65b9\u5f0f2\uff1a\u4e0a\u4e0b\u6587\u7ba1\u7406\u5668\uff08with\u8bed\u53e5\uff09\nprint(\"\\n\u6b63\u786e\u65b9\u5f0f2\uff1a\u4e0a\u4e0b\u6587\u7ba1\u7406\u5668\")\nwith FileHandler(\"test2.txt\", \"w\") as file:\n    file.write(\"Hello, World!\")\n# \u79bb\u5f00with\u5757\u65f6\u81ea\u52a8\u5173\u95ed\n\n# \u6b63\u786e\u7684\u65b9\u5f0f3\uff1atry-finally\nprint(\"\\n\u6b63\u786e\u65b9\u5f0f3\uff1atry-finally\")\nhandler2 = FileHandler(\"test3.txt\", \"w\")\ntry:\n    handler2.open()\n    handler2._file.write(\"Data\")\nfinally:\n    handler2.close()<\/code><\/pre>\n\n\n\n<h3 class=\"wp-block-heading\">2.3 \u6790\u6784\u65b9\u6cd5\u7684\u5c40\u9650\u6027<\/h3>\n\n\n\n<pre class=\"wp-block-code\"><code># ============================================================================\n# \u6790\u6784\u65b9\u6cd5\u7684\u5c40\u9650\u6027\u548c\u9677\u9631\n# ============================================================================\n\nclass CircularReference:\n    \"\"\"\u5faa\u73af\u5f15\u7528\u95ee\u9898\u793a\u4f8b\"\"\"\n\n    def __init__(self, name: str):\n        self.name = name\n        self.partner = None\n        print(f\"&#91;\u521b\u5efa] CircularReference '{self.name}'\")\n\n    def set_partner(self, partner):\n        \"\"\"\u8bbe\u7f6e\u4f19\u4f34\uff0c\u521b\u5efa\u5faa\u73af\u5f15\u7528\"\"\"\n        self.partner = partner\n\n    def __del__(self):\n        print(f\"&#91;\u9500\u6bc1] CircularReference '{self.name}'\")\n\nclass ResourceLeakDemo:\n    \"\"\"\u8d44\u6e90\u6cc4\u6f0f\u6f14\u793a\"\"\"\n\n    def __init__(self, resource_name: str):\n        self.resource_name = resource_name\n        self.resource = f\"{resource_name}_handle\"\n        print(f\"&#91;\u83b7\u53d6] \u8d44\u6e90: {self.resource_name}\")\n\n    def __del__(self):\n        # \u95ee\u9898\uff1a\u5982\u679c\u629b\u51fa\u5f02\u5e38\uff0c\u4f1a\u53d1\u751f\u4ec0\u4e48\uff1f\n        print(f\"&#91;\u91ca\u653e] \u8d44\u6e90: {self.resource_name}\")\n        # \u6a21\u62df\u6e05\u7406\u65f6\u53d1\u751f\u5f02\u5e38\n        raise Exception(f\"\u6e05\u7406{self.resource_name}\u65f6\u51fa\u9519\uff01\")\n\n# \u6f14\u793a\u6790\u6784\u65b9\u6cd5\u7684\u95ee\u9898\nprint(\"=== \u6790\u6784\u65b9\u6cd5\u7684\u5c40\u9650\u6027 ===\")\n\nprint(\"\\n\u95ee\u98981\uff1a\u5faa\u73af\u5f15\u7528\u5bfc\u81f4\u65e0\u6cd5\u56de\u6536\")\nobj1 = CircularReference(\"\u5bf9\u8c61A\")\nobj2 = CircularReference(\"\u5bf9\u8c61B\")\nobj1.set_partner(obj2)\nobj2.set_partner(obj1)  # \u521b\u5efa\u5faa\u73af\u5f15\u7528\n\n# \u5220\u9664\u5f15\u7528\ndel obj1\ndel obj2\n\nprint(\"\\n\u624b\u52a8\u89e6\u53d1\u5783\u573e\u56de\u6536...\")\nimport gc\ncollected = gc.collect()\nprint(f\"\u5783\u573e\u56de\u6536\u5668\u56de\u6536\u4e86 {collected} \u4e2a\u5bf9\u8c61\")\n\nprint(\"\\n\u95ee\u98982\uff1a\u6790\u6784\u65b9\u6cd5\u4e2d\u7684\u5f02\u5e38\")\ntry:\n    demo = ResourceLeakDemo(\"\u91cd\u8981\u8d44\u6e90\")\n    del demo\n    gc.collect()\nexcept Exception as e:\n    print(f\"\u6355\u83b7\u5230\u5f02\u5e38: {e}\")\n    # \u6ce8\u610f\uff1a__del__\u4e2d\u7684\u5f02\u5e38\u53ef\u80fd\u4e0d\u4f1a\u88ab\u6b63\u786e\u4f20\u64ad\n\nprint(\"\\n\u95ee\u98983\uff1a\u4e0d\u786e\u5b9a\u7684\u8c03\u7528\u65f6\u673a\")\nclass TimingDemo:\n    def __init__(self, id):\n        self.id = id\n\n    def __del__(self):\n        print(f\"\u5bf9\u8c61 {self.id} \u88ab\u9500\u6bc1\")\n\nprint(\"\u521b\u5efa\u591a\u4e2a\u5bf9\u8c61...\")\nobjects = &#91;TimingDemo(i) for i in range(5)]\nprint(\"\u5220\u9664\u5f15\u7528...\")\ndel objects\nprint(\"\u5bf9\u8c61\u53ef\u80fd\u4e0d\u4f1a\u7acb\u5373\u88ab\u9500\u6bc1...\")\n# \u5783\u573e\u56de\u6536\u53ef\u80fd\u7a0d\u540e\u624d\u53d1\u751f<\/code><\/pre>\n\n\n\n<p>\u6790\u6784\u65b9\u6cd5\u7684\u9677\u9631\u603b\u7ed3\uff1a<\/p>\n\n\n\n<ol class=\"wp-block-list\">\n<li><strong>\u65f6\u673a\u4e0d\u786e\u5b9a<\/strong>\uff1a\u6790\u6784\u65b9\u6cd5\u8c03\u7528\u65f6\u673a\u7531\u5783\u573e\u56de\u6536\u5668\u51b3\u5b9a<\/li>\n\n\n\n<li><strong>\u5faa\u73af\u5f15\u7528<\/strong>\uff1a\u5faa\u73af\u5f15\u7528\u5bf9\u8c61\u53ef\u80fd\u6c38\u8fdc\u4e0d\u4f1a\u88ab\u56de\u6536<\/li>\n\n\n\n<li><strong>\u5f02\u5e38\u5904\u7406<\/strong>\uff1a\u6790\u6784\u65b9\u6cd5\u4e2d\u7684\u5f02\u5e38\u96be\u4ee5\u5904\u7406<\/li>\n\n\n\n<li><strong>\u6027\u80fd\u5f71\u54cd<\/strong>\uff1a\u590d\u6742\u7684\u6790\u6784\u903b\u8f91\u53ef\u80fd\u5f71\u54cd\u6027\u80fd<\/li>\n\n\n\n<li><strong>\u987a\u5e8f\u95ee\u9898<\/strong>\uff1a\u5bf9\u8c61\u9500\u6bc1\u987a\u5e8f\u4e0d\u53ef\u9884\u6d4b<\/li>\n<\/ol>\n\n\n\n<h3 class=\"wp-block-heading\">2.4 RAII\u6a21\u5f0f\uff1a\u8d44\u6e90\u83b7\u53d6\u5373\u521d\u59cb\u5316<\/h3>\n\n\n\n<p>RAII\uff08Resource Acquisition Is Initialization\uff09\u662f\u4e00\u79cdC++\u4e2d\u7684\u6838\u5fc3\u7f16\u7a0b\u8303\u5f0f\uff0c\u5176\u6838\u5fc3\u601d\u60f3\u662f\uff1a<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>\u8d44\u6e90\u83b7\u53d6\uff08\u5982\u5185\u5b58\u5206\u914d\uff09\u5728\u5bf9\u8c61\u6784\u9020\u65f6\u8fdb\u884c<\/li>\n\n\n\n<li>\u8d44\u6e90\u91ca\u653e\uff08\u5982\u5185\u5b58\u91ca\u653e\uff09\u5728\u5bf9\u8c61\u6790\u6784\u65f6\u8fdb\u884c<\/li>\n\n\n\n<li>\u5229\u7528\u6808\u5c55\u5f00\uff08stack unwinding\uff09\u4fdd\u8bc1\u5f02\u5e38\u5b89\u5168<\/li>\n<\/ul>\n\n\n\n<pre class=\"wp-block-code\"><code># ============================================================================\n# Python\u4e2d\u7684RAII\u6a21\u5f0f\u6a21\u62df\n# ============================================================================\n\nfrom contextlib import contextmanager\nfrom typing import Any\n\nclass RAIIResource:\n    \"\"\"RAII\u98ce\u683c\u8d44\u6e90\u7ba1\u7406\"\"\"\n\n    def __init__(self, resource_name: str):\n        self.resource_name = resource_name\n        self.resource = self._acquire_resource()\n        print(f\"&#91;RAII] \u83b7\u53d6\u8d44\u6e90: {self.resource_name}\")\n\n    def _acquire_resource(self) -&gt; Any:\n        \"\"\"\u6a21\u62df\u83b7\u53d6\u8d44\u6e90\"\"\"\n        return f\"{self.resource_name}_handle\"\n\n    def use(self) -&gt; Any:\n        \"\"\"\u4f7f\u7528\u8d44\u6e90\"\"\"\n        print(f\"&#91;\u4f7f\u7528] \u4f7f\u7528\u8d44\u6e90: {self.resource_name}\")\n        return self.resource\n\n    def release(self):\n        \"\"\"\u91ca\u653e\u8d44\u6e90\"\"\"\n        if hasattr(self, 'resource') and self.resource:\n            print(f\"&#91;\u91ca\u653e] \u91ca\u653e\u8d44\u6e90: {self.resource_name}\")\n            self.resource = None\n\n    def __enter__(self):\n        \"\"\"\u652f\u6301with\u8bed\u53e5\"\"\"\n        return self\n\n    def __exit__(self, exc_type, exc_val, exc_tb):\n        \"\"\"\u9000\u51fawith\u5757\u65f6\u81ea\u52a8\u91ca\u653e\"\"\"\n        self.release()\n        return False  # \u4e0d\u6291\u5236\u5f02\u5e38\n\n    def __del__(self):\n        \"\"\"\u6790\u6784\u65b9\u6cd5\u4f5c\u4e3a\u6700\u540e\u4fdd\u969c\"\"\"\n        self.release()\n\n@contextmanager\ndef managed_resource(resource_name: str):\n    \"\"\"\u4e0a\u4e0b\u6587\u7ba1\u7406\u5668\u5b9e\u73b0RAII\"\"\"\n    resource = None\n    try:\n        # \u8d44\u6e90\u83b7\u53d6\uff08\u521d\u59cb\u5316\uff09\n        resource = f\"{resource_name}_handle\"\n        print(f\"&#91;\u83b7\u53d6] \u8d44\u6e90: {resource_name}\")\n        yield resource\n    finally:\n        # \u8d44\u6e90\u91ca\u653e\uff08\u6e05\u7406\uff09\n        if resource:\n            print(f\"&#91;\u91ca\u653e] \u8d44\u6e90: {resource_name}\")\n\n# RAII\u6a21\u5f0f\u6f14\u793a\nprint(\"=== RAII\u6a21\u5f0f\u6f14\u793a ===\")\n\nprint(\"\\n\u65b9\u6cd51\uff1a\u4f7f\u7528\u7c7b\u5b9e\u73b0RAII\")\nwith RAIIResource(\"\u6570\u636e\u5e93\u8fde\u63a5\") as db:\n    db_handle = db.use()\n    # \u5728\u8fd9\u91cc\u4f7f\u7528\u8d44\u6e90\n    # \u65e0\u8bba\u662f\u5426\u53d1\u751f\u5f02\u5e38\uff0c\u8d44\u6e90\u90fd\u4f1a\u88ab\u91ca\u653e\n\nprint(\"\\n\u65b9\u6cd52\uff1a\u4f7f\u7528\u4e0a\u4e0b\u6587\u7ba1\u7406\u5668\")\nwith managed_resource(\"\u6587\u4ef6\u53e5\u67c4\") as file:\n    # \u5728\u8fd9\u91cc\u4f7f\u7528\u6587\u4ef6\n    print(f\"\u4f7f\u7528\u6587\u4ef6: {file}\")\n    # \u79bb\u5f00with\u5757\u65f6\u81ea\u52a8\u91ca\u653e\n\nprint(\"\\n\u65b9\u6cd53\uff1a\u6a21\u62dfC++ RAII\")\nclass Lock:\n    \"\"\"\u6a21\u62df\u4e92\u65a5\u9501\u7684RAII\u5b9e\u73b0\"\"\"\n\n    def __init__(self, lock_name: str):\n        self.lock_name = lock_name\n        self._acquire()\n\n    def _acquire(self):\n        print(f\"&#91;\u52a0\u9501] {self.lock_name}\")\n\n    def _release(self):\n        print(f\"&#91;\u89e3\u9501] {self.lock_name}\")\n\n    def __enter__(self):\n        return self\n\n    def __exit__(self, exc_type, exc_val, exc_tb):\n        self._release()\n        return False\n\n# \u4f7f\u7528RAII\u9501\nprint(\"\u8fdb\u5165\u4e34\u754c\u533a\u524d...\")\nwith Lock(\"\u5171\u4eab\u8d44\u6e90\u9501\"):\n    print(\"\u5728\u4e34\u754c\u533a\u4e2d...\")\n    # \u8fd9\u91cc\u53ef\u4ee5\u5b89\u5168\u5730\u8bbf\u95ee\u5171\u4eab\u8d44\u6e90\nprint(\"\u79bb\u5f00\u4e34\u754c\u533a\u540e...\")<\/code><\/pre>\n\n\n\n<p>RAII\u6a21\u5f0f\u7684\u4f18\u52bf\uff1a<\/p>\n\n\n\n<ol class=\"wp-block-list\">\n<li><strong>\u5f02\u5e38\u5b89\u5168<\/strong>\uff1a\u5373\u4f7f\u53d1\u751f\u5f02\u5e38\uff0c\u8d44\u6e90\u4e5f\u4f1a\u88ab\u6b63\u786e\u91ca\u653e<\/li>\n\n\n\n<li><strong>\u4ee3\u7801\u7b80\u6d01<\/strong>\uff1a\u81ea\u52a8\u7ba1\u7406\u8d44\u6e90\u751f\u547d\u5468\u671f<\/li>\n\n\n\n<li><strong>\u53ef\u9884\u6d4b\u6027<\/strong>\uff1a\u8d44\u6e90\u751f\u547d\u5468\u671f\u4e0e\u5bf9\u8c61\u751f\u547d\u5468\u671f\u7ed1\u5b9a<\/li>\n\n\n\n<li><strong>\u51cf\u5c11\u9519\u8bef<\/strong>\uff1a\u907f\u514d\u5fd8\u8bb0\u91ca\u653e\u8d44\u6e90<\/li>\n<\/ol>\n\n\n\n<h2 class=\"wp-block-heading\">\u7b2c\u4e09\u90e8\u5206\uff1a\u5783\u573e\u56de\u6536\u673a\u5236\u57fa\u7840<\/h2>\n\n\n\n<h3 class=\"wp-block-heading\">3.1 \u4ec0\u4e48\u662f\u5783\u573e\u56de\u6536\uff1f<\/h3>\n\n\n\n<p>\u5783\u573e\u56de\u6536\uff08Garbage Collection\uff0cGC\uff09\u662f\u81ea\u52a8\u5185\u5b58\u7ba1\u7406\u7684\u4e00\u79cd\u5f62\u5f0f\uff0c\u5b83\u81ea\u52a8\u8bc6\u522b\u548c\u56de\u6536\u7a0b\u5e8f\u4e0d\u518d\u4f7f\u7528\u7684\u5185\u5b58\u3002\u5783\u573e\u56de\u6536\u5668\u7684\u4e3b\u8981\u4efb\u52a1\u662f\uff1a<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>\u8bc6\u522b\u5783\u573e\u5bf9\u8c61\uff08\u4e0d\u518d\u88ab\u7a0b\u5e8f\u5f15\u7528\u7684\u5bf9\u8c61\uff09<\/li>\n\n\n\n<li>\u56de\u6536\u5783\u573e\u5bf9\u8c61\u5360\u7528\u7684\u5185\u5b58<\/li>\n\n\n\n<li>\u6574\u7406\u5185\u5b58\u4ee5\u51cf\u5c11\u788e\u7247<\/li>\n<\/ul>\n\n\n\n<p>\u5783\u573e\u56de\u6536\u7684\u6838\u5fc3\u4ef7\u503c\u662f<strong>\u89e3\u653e\u7a0b\u5e8f\u5458<\/strong>\uff0c\u8ba9\u4ed6\u4eec\u4e13\u6ce8\u4e8e\u4e1a\u52a1\u903b\u8f91\u800c\u4e0d\u662f\u5185\u5b58\u7ba1\u7406\u3002<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">3.2 \u5f15\u7528\u8ba1\u6570\u7b97\u6cd5<\/h3>\n\n\n\n<pre class=\"wp-block-code\"><code># ============================================================================\n# \u5f15\u7528\u8ba1\u6570\u539f\u7406\u6f14\u793a\n# ============================================================================\n\nimport sys\n\ndef demonstrate_reference_counting():\n    \"\"\"\u6f14\u793aPython\u7684\u5f15\u7528\u8ba1\u6570\u673a\u5236\"\"\"\n\n    print(\"=== \u5f15\u7528\u8ba1\u6570\u6f14\u793a ===\")\n\n    # \u521b\u5efa\u5bf9\u8c61\n    a = &#91;1, 2, 3]  # \u5217\u8868\u5bf9\u8c61\u88ab\u521b\u5efa\uff0c\u5f15\u7528\u8ba1\u6570=1\n    print(f\"\u521b\u5efa\u5217\u8868\u540e\u5f15\u7528\u8ba1\u6570: {sys.getrefcount(a)}\")  # \u6ce8\u610f\uff1agetrefcount\u4f1a\u4e34\u65f6\u589e\u52a0\u5f15\u7528\n\n    # \u589e\u52a0\u5f15\u7528\n    b = a  # \u5f15\u7528\u8ba1\u6570+1\n    print(f\"\u8d4b\u503c\u7ed9b\u540e\u5f15\u7528\u8ba1\u6570: {sys.getrefcount(a) - 1}\")  # \u51cf1\u6392\u9664\u4e34\u65f6\u5f15\u7528\n\n    # \u4f5c\u4e3a\u51fd\u6570\u53c2\u6570\u4f20\u9012\n    def some_function(x):\n        print(f\"\u51fd\u6570\u5185\u5f15\u7528\u8ba1\u6570: {sys.getrefcount(x) - 1}\")\n\n    some_function(a)  # \u51fd\u6570\u8c03\u7528\u671f\u95f4\u5f15\u7528\u8ba1\u6570\u4f1a\u589e\u52a0\n\n    # \u5b58\u50a8\u5728\u5bb9\u5668\u4e2d\n    container = &#91;a, a]  # \u4e24\u6b21\u5f15\u7528\uff0c\u8ba1\u6570+2\n    print(f\"\u653e\u5165\u5217\u8868\u540e\u5f15\u7528\u8ba1\u6570: {sys.getrefcount(a) - 1}\")\n\n    # \u51cf\u5c11\u5f15\u7528\n    del b  # \u5220\u9664\u4e00\u4e2a\u5f15\u7528\n    print(f\"\u5220\u9664b\u540e\u5f15\u7528\u8ba1\u6570: {sys.getrefcount(a) - 1}\")\n\n    container.pop()  # \u4ece\u5bb9\u5668\u4e2d\u79fb\u9664\u4e00\u4e2a\u5f15\u7528\n    print(f\"\u4ece\u5bb9\u5668\u79fb\u9664\u540e\u5f15\u7528\u8ba1\u6570: {sys.getrefcount(a) - 1}\")\n\n    # \u6700\u540e\u5220\u9664\u6240\u6709\u5f15\u7528\n    del a\n    del container&#91;0]\n    # \u73b0\u5728\u5217\u8868\u5bf9\u8c61\u5f15\u7528\u8ba1\u6570\u4e3a0\uff0c\u53ef\u4ee5\u88ab\u56de\u6536\n\nclass ReferenceDemo:\n    \"\"\"\u81ea\u5b9a\u4e49\u5f15\u7528\u8ba1\u6570\u6f14\u793a\"\"\"\n\n    def __init__(self, name):\n        self.name = name\n        print(f\"&#91;\u521b\u5efa] {self.name}\")\n\n    def __del__(self):\n        print(f\"&#91;\u9500\u6bc1] {self.name}\")\n\nprint(\"\\n=== \u5f15\u7528\u8ba1\u6570\u751f\u547d\u5468\u671f ===\")\nobj1 = ReferenceDemo(\"\u5bf9\u8c611\")\nobj2 = ReferenceDemo(\"\u5bf9\u8c612\")\n\n# \u521b\u5efa\u5f15\u7528\u5173\u7cfb\nobj1.other = obj2\nobj2.other = obj1\n\nprint(\"\\n\u5220\u9664\u76f4\u63a5\u5f15\u7528...\")\ndel obj1\ndel obj2\n\nprint(\"\\n\u89e6\u53d1\u5783\u573e\u56de\u6536\uff08\u5904\u7406\u5faa\u73af\u5f15\u7528\uff09...\")\nimport gc\ngc.collect()\n\ndemonstrate_reference_counting()<\/code><\/pre>\n\n\n\n<p>\u5f15\u7528\u8ba1\u6570\u7684\u7279\u70b9\uff1a<\/p>\n\n\n\n<p><strong>\u4f18\u70b9\uff1a<\/strong><\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>\u7b80\u5355\u9ad8\u6548\uff1a\u8ba1\u6570\u589e\u51cf\u662f\u5e38\u6570\u65f6\u95f4\u64cd\u4f5c<\/li>\n\n\n\n<li>\u5b9e\u65f6\u6027\uff1a\u5bf9\u8c61\u4e0d\u518d\u88ab\u5f15\u7528\u65f6\u7acb\u5373\u91ca\u653e<\/li>\n\n\n\n<li>\u53ef\u9884\u6d4b\u6027\uff1a\u5185\u5b58\u7ba1\u7406\u884c\u4e3a\u53ef\u9884\u6d4b<\/li>\n<\/ul>\n\n\n\n<p><strong>\u7f3a\u70b9\uff1a<\/strong><\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>\u5faa\u73af\u5f15\u7528\uff1a\u5faa\u73af\u5f15\u7528\u5bf9\u8c61\u65e0\u6cd5\u88ab\u56de\u6536<\/li>\n\n\n\n<li>\u6027\u80fd\u5f00\u9500\uff1a\u6bcf\u6b21\u5f15\u7528\u66f4\u6539\u90fd\u9700\u8981\u66f4\u65b0\u8ba1\u6570<\/li>\n\n\n\n<li>\u539f\u5b50\u6027\uff1a\u591a\u7ebf\u7a0b\u73af\u5883\u4e0b\u9700\u8981\u539f\u5b50\u64cd\u4f5c<\/li>\n<\/ul>\n\n\n\n<h3 class=\"wp-block-heading\">3.3 \u6807\u8bb0-\u6e05\u9664\u7b97\u6cd5<\/h3>\n\n\n\n<pre class=\"wp-block-code\"><code># ============================================================================\n# \u6807\u8bb0-\u6e05\u9664\u7b97\u6cd5\u539f\u7406\u6f14\u793a\n# ============================================================================\n\nimport gc\nimport time\n\nclass GraphNode:\n    \"\"\"\u56fe\u8282\u70b9\uff0c\u7528\u4e8e\u6f14\u793a\u6807\u8bb0-\u6e05\u9664\u7b97\u6cd5\"\"\"\n\n    def __init__(self, name):\n        self.name = name\n        self.children = &#91;]\n        print(f\"&#91;\u8282\u70b9\u521b\u5efa] {self.name}\")\n\n    def add_child(self, child):\n        self.children.append(child)\n\n    def __repr__(self):\n        return f\"GraphNode('{self.name}')\"\n\ndef demonstrate_mark_sweep():\n    \"\"\"\u6f14\u793a\u6807\u8bb0-\u6e05\u9664\u7b97\u6cd5\u539f\u7406\"\"\"\n\n    print(\"=== \u6807\u8bb0-\u6e05\u9664\u7b97\u6cd5\u6f14\u793a ===\")\n\n    # \u6b65\u9aa41\uff1a\u521b\u5efa\u5bf9\u8c61\u56fe\uff08\u5305\u542b\u5faa\u73af\u5f15\u7528\uff09\n    print(\"\\n1. \u521b\u5efa\u5bf9\u8c61\u56fe...\")\n    root = GraphNode(\"\u6839\u8282\u70b9\")\n\n    node_a = GraphNode(\"\u8282\u70b9A\")\n    node_b = GraphNode(\"\u8282\u70b9B\")\n    node_c = GraphNode(\"\u8282\u70b9C\")\n\n    # \u6784\u5efa\u5f15\u7528\u5173\u7cfb\uff08\u5305\u542b\u5faa\u73af\u5f15\u7528\uff09\n    root.add_child(node_a)\n    root.add_child(node_b)\n    node_a.add_child(node_c)\n    node_b.add_child(node_c)\n    node_c.add_child(node_a)  # \u521b\u5efa\u5faa\u73af\u5f15\u7528 A &lt;-&gt; C\n\n    # \u6b65\u9aa42\uff1a\u6a21\u62df\u6839\u96c6\u5408\uff08GC Roots\uff09\n    gc_roots = &#91;root]\n\n    print(f\"\\n2. GC\u6839\u96c6\u5408: {gc_roots}\")\n    print(\"   \u6839\u96c6\u5408\u5305\u62ec:\")\n    print(\"   - \u5168\u5c40\u53d8\u91cf\")\n    print(\"   - \u6d3b\u52a8\u7ebf\u7a0b\u7684\u6808\u5e27\u4e2d\u7684\u53d8\u91cf\")\n    print(\"   - \u5bc4\u5b58\u5668\u4e2d\u7684\u53d8\u91cf\")\n\n    # \u6b65\u9aa43\uff1a\u6807\u8bb0\u9636\u6bb5\uff08\u4ece\u6839\u96c6\u5408\u5f00\u59cb\u904d\u5386\u6240\u6709\u53ef\u8fbe\u5bf9\u8c61\uff09\n    print(\"\\n3. \u6807\u8bb0\u9636\u6bb5: \u4ece\u6839\u96c6\u5408\u5f00\u59cb\u904d\u5386\")\n\n    def mark_from_roots(roots):\n        \"\"\"\u6a21\u62df\u6807\u8bb0\u8fc7\u7a0b\"\"\"\n        marked = set()\n        to_visit = list(roots)\n\n        while to_visit:\n            current = to_visit.pop()\n            if id(current) not in marked:\n                marked.add(id(current))\n                print(f\"   \u6807\u8bb0: {current}\")\n\n                # \u904d\u5386\u5b50\u8282\u70b9\n                if hasattr(current, 'children'):\n                    for child in current.children:\n                        if id(child) not in marked:\n                            to_visit.append(child)\n\n        return marked\n\n    reachable = mark_from_roots(gc_roots)\n    print(f\"   \u53ef\u8fbe\u5bf9\u8c61\u6570\u91cf: {len(reachable)}\")\n\n    # \u6b65\u9aa44\uff1a\u521b\u5efa\u4e0d\u53ef\u8fbe\u5bf9\u8c61\uff08\u5783\u573e\uff09\n    print(\"\\n4. \u521b\u5efa\u4e0d\u53ef\u8fbe\u5bf9\u8c61...\")\n    garbage1 = GraphNode(\"\u5783\u573e1\")\n    garbage2 = GraphNode(\"\u5783\u573e2\")\n    garbage1.add_child(garbage2)\n    garbage2.add_child(garbage1)  # \u5faa\u73af\u5f15\u7528\u7684\u5783\u573e\n\n    # \u65ad\u5f00\u4e0e\u6839\u96c6\u5408\u7684\u8fde\u63a5\n    garbage1 = None\n    garbage2 = None\n\n    # \u6b65\u9aa45\uff1a\u6e05\u9664\u9636\u6bb5\n    print(\"\\n5. \u6e05\u9664\u9636\u6bb5: \u56de\u6536\u4e0d\u53ef\u8fbe\u5bf9\u8c61\")\n\n    # \u83b7\u53d6\u6240\u6709\u5bf9\u8c61\uff08\u6a21\u62df\u5806\uff09\n    all_objects = gc.get_objects()\n    demo_objects = &#91;obj for obj in all_objects if isinstance(obj, GraphNode)]\n\n    print(f\"   \u5806\u4e2d\u603b\u5bf9\u8c61\u6570: {len(demo_objects)}\")\n\n    # \u8bc6\u522b\u5783\u573e\u5bf9\u8c61\uff08\u4e0d\u53ef\u8fbe\u5bf9\u8c61\uff09\n    garbage_objects = &#91;]\n    for obj in demo_objects:\n        if id(obj) not in reachable:\n            garbage_objects.append(obj)\n\n    print(f\"   \u8bc6\u522b\u51fa\u7684\u5783\u573e\u5bf9\u8c61: {len(garbage_objects)}\")\n\n    # \u6a21\u62df\u6e05\u9664\uff08\u5728\u5b9e\u9645GC\u4e2d\u8fd9\u4e9b\u5bf9\u8c61\u7684\u5185\u5b58\u4f1a\u88ab\u56de\u6536\uff09\n    for obj in garbage_objects:\n        print(f\"   \u56de\u6536: {obj}\")\n\n    return len(reachable), len(garbage_objects)\n\n# \u8fd0\u884c\u6f14\u793a\nreachable_count, garbage_count = demonstrate_mark_sweep()\nprint(f\"\\n\u603b\u7ed3: \u53ef\u8fbe\u5bf9\u8c61={reachable_count}, \u5783\u573e\u5bf9\u8c61={garbage_count}\")<\/code><\/pre>\n\n\n\n<p>\u6807\u8bb0-\u6e05\u9664\u7b97\u6cd5\u7684\u7279\u70b9\uff1a<\/p>\n\n\n\n<p><strong>\u4f18\u70b9\uff1a<\/strong><\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>\u5904\u7406\u5faa\u73af\u5f15\u7528\uff1a\u53ef\u4ee5\u56de\u6536\u5faa\u73af\u5f15\u7528\u5bf9\u8c61<\/li>\n\n\n\n<li>\u7b80\u5355\u53ef\u9760\uff1a\u7b97\u6cd5\u76f8\u5bf9\u7b80\u5355\uff0c\u5b9e\u73b0\u53ef\u9760<\/li>\n<\/ul>\n\n\n\n<p><strong>\u7f3a\u70b9\uff1a<\/strong><\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>\u6682\u505c\u65f6\u95f4\uff1a\u9700\u8981\u505c\u6b62\u7a0b\u5e8f\u6267\u884c\uff08&#8221;Stop-the-World&#8221;\uff09<\/li>\n\n\n\n<li>\u5185\u5b58\u788e\u7247\uff1a\u53ef\u80fd\u4ea7\u751f\u5185\u5b58\u788e\u7247<\/li>\n\n\n\n<li>\u4e24\u6b21\u904d\u5386\uff1a\u9700\u8981\u6807\u8bb0\u548c\u6e05\u9664\u4e24\u6b21\u5806\u904d\u5386<\/li>\n<\/ul>\n\n\n\n<h3 class=\"wp-block-heading\">3.4 \u5206\u4ee3\u6536\u96c6\u7b97\u6cd5<\/h3>\n\n\n\n<pre class=\"wp-block-code\"><code># ============================================================================\n# \u5206\u4ee3\u6536\u96c6\u7b97\u6cd5\u539f\u7406\u6f14\u793a\n# ============================================================================\n\nimport gc\nimport time\nfrom collections import defaultdict\n\nclass GenerationalObject:\n    \"\"\"\u7528\u4e8e\u6f14\u793a\u5206\u4ee3\u6536\u96c6\u7684\u5bf9\u8c61\"\"\"\n\n    def __init__(self, name, generation=0):\n        self.name = name\n        self.generation = generation\n        self.created_at = time.time()\n        self.access_count = 0\n\n    def access(self):\n        \"\"\"\u8bbf\u95ee\u5bf9\u8c61\uff0c\u6a21\u62df\u5176\u53d8\u5f97'\u66f4\u6d3b\u8dc3'\"\"\"\n        self.access_count += 1\n        return self\n\n    def __repr__(self):\n        age = time.time() - self.created_at\n        return f\"GenerationalObject('{self.name}', \u4ee3:{self.generation}, \u5e74\u9f84:{age:.1f}s, \u8bbf\u95ee:{self.access_count})\"\n\ndef demonstrate_generational_gc():\n    \"\"\"\u6f14\u793a\u5206\u4ee3\u5783\u573e\u56de\u6536\u539f\u7406\"\"\"\n\n    print(\"=== \u5206\u4ee3\u5783\u573e\u56de\u6536\u6f14\u793a ===\")\n\n    # \u5206\u4ee3\u5047\u8bbe\uff1a\u5927\u591a\u6570\u5bf9\u8c61\u5f88\u5feb\u6b7b\u4ea1\uff0c\u5c11\u6570\u5bf9\u8c61\u5b58\u6d3b\u5f88\u4e45\n    print(\"\\n\u5206\u4ee3\u6536\u96c6\u7684\u6838\u5fc3\u5047\u8bbe:\")\n    print(\"1. \u5f31\u4ee3\u5047\u8bbe\uff1a\u5927\u591a\u6570\u5bf9\u8c61\u5f88\u5feb\u53d8\u5f97\u4e0d\u53ef\u8fbe\")\n    print(\"2. \u5f3a\u4ee3\u5047\u8bbe\uff1a\u5b58\u6d3b\u8d8a\u4e45\u7684\u5bf9\u8c61\u8d8a\u53ef\u80fd\u7ee7\u7eed\u5b58\u6d3b\")\n    print(\"3. \u4ee3\u95f4\u5f15\u7528\uff1a\u8001\u5bf9\u8c61\u53ef\u80fd\u5f15\u7528\u65b0\u5bf9\u8c61\uff0c\u4f46\u53cd\u5411\u5f88\u5c11\")\n\n    # \u521b\u5efa\u4e0d\u540c\u4ee3\u7684\u5bf9\u8c61\n    print(\"\\n\u521b\u5efa\u5bf9\u8c61...\")\n    objects = &#91;]\n\n    # \u7b2c0\u4ee3\uff1a\u5e74\u8f7b\u4ee3\uff08\u5f88\u591a\uff0c\u4f46\u5927\u591a\u6570\u5f88\u5feb\u6b7b\u4ea1\uff09\n    for i in range(10):\n        obj = GenerationalObject(f\"\u5e74\u8f7b\u5bf9\u8c61{i}\", 0)\n        objects.append(obj)\n\n    # \u7b2c1\u4ee3\uff1a\u4e2d\u5e74\u4ee3\uff08\u8f83\u5c11\uff0c\u5b58\u6d3b\u65f6\u95f4\u4e2d\u7b49\uff09\n    for i in range(5):\n        obj = GenerationalObject(f\"\u4e2d\u5e74\u5bf9\u8c61{i}\", 1)\n        # \u6a21\u62df\u4e00\u4e9b\u5bf9\u8c61\u88ab\u9891\u7e41\u8bbf\u95ee\n        if i % 2 == 0:\n            for _ in range(3):\n                obj.access()\n        objects.append(obj)\n\n    # \u7b2c2\u4ee3\uff1a\u8001\u5e74\u4ee3\uff08\u5f88\u5c11\uff0c\u957f\u671f\u5b58\u6d3b\uff09\n    for i in range(3):\n        obj = GenerationalObject(f\"\u8001\u5e74\u5bf9\u8c61{i}\", 2)\n        # \u8001\u5bf9\u8c61\u88ab\u9891\u7e41\u8bbf\u95ee\n        for _ in range(10):\n            obj.access()\n        objects.append(obj)\n\n    print(f\"\u603b\u5bf9\u8c61\u6570: {len(objects)}\")\n\n    # \u6a21\u62df\u4e0d\u540c\u4ee3\u7684\u6536\u96c6\u9891\u7387\n    print(\"\\n\u5206\u4ee3\u6536\u96c6\u7b56\u7565:\")\n    print(\"\u7b2c0\u4ee3\uff08\u5e74\u8f7b\u4ee3\uff09: \u6536\u96c6\u9891\u7e41\uff08\u6bcf\u6b21minor GC\uff09\")\n    print(\"\u7b2c1\u4ee3\uff08\u4e2d\u5e74\u4ee3\uff09: \u6536\u96c6\u8f83\u5c11\uff08\u51e0\u6b21minor GC\u540e\uff09\")\n    print(\"\u7b2c2\u4ee3\uff08\u8001\u5e74\u4ee3\uff09: \u6536\u96c6\u5f88\u5c11\uff08major GC\u65f6\uff09\")\n\n    # \u83b7\u53d6Python\u5b9e\u9645\u7684GC\u5206\u4ee3\u4fe1\u606f\n    print(\"\\nPython GC\u5206\u4ee3\u7edf\u8ba1:\")\n    for i in range(3):\n        threshold = gc.get_threshold(i)\n        print(f\"\u7b2c{i}\u4ee3: \u9608\u503c={threshold}\")\n\n    # \u6a21\u62df\u5bf9\u8c61\u664b\u5347\n    print(\"\\n\u5bf9\u8c61\u664b\u5347\u8fc7\u7a0b:\")\n    print(\"1. \u5bf9\u8c61\u5728\u7b2c0\u4ee3\u5b58\u6d3b\u4e00\u6b21GC \u2192 \u664b\u5347\u5230\u7b2c1\u4ee3\")\n    print(\"2. \u5bf9\u8c61\u5728\u7b2c1\u4ee3\u5b58\u6d3b\u4e00\u6b21GC \u2192 \u664b\u5347\u5230\u7b2c2\u4ee3\")\n    print(\"3. \u7b2c2\u4ee3\u662f\u6700\u9ad8\u4ee3\uff0c\u4e0d\u518d\u664b\u5347\")\n\n    # \u5c55\u793a\u5bf9\u8c61\u5e74\u9f84\u5206\u5e03\n    print(\"\\n\u5bf9\u8c61\u5e74\u9f84\u5206\u5e03:\")\n    by_generation = defaultdict(list)\n    for obj in objects:\n        by_generation&#91;obj.generation].append(obj)\n\n    for gen in sorted(by_generation.keys()):\n        objs = by_generation&#91;gen]\n        avg_age = sum(time.time() - o.created_at for o in objs) \/ len(objs)\n        avg_access = sum(o.access_count for o in objs) \/ len(objs)\n        print(f\"\u7b2c{gen}\u4ee3: {len(objs)}\u4e2a\u5bf9\u8c61, \u5e73\u5747\u5e74\u9f84{avg_age:.1f}s, \u5e73\u5747\u8bbf\u95ee{avg_access:.1f}\u6b21\")\n\n    # \u624b\u52a8\u89e6\u53d1GC\u5e76\u89c2\u5bdf\n    print(\"\\n\u624b\u52a8\u89e6\u53d1\u5783\u573e\u56de\u6536...\")\n    gc.collect()\n\n    # \u83b7\u53d6GC\u7edf\u8ba1\n    print(\"\\nGC\u7edf\u8ba1\u4fe1\u606f:\")\n    print(f\"GC\u8c03\u7528\u6b21\u6570: {gc.get_count()}\")\n\n    return objects\n\n# \u8fd0\u884c\u6f14\u793a\nobjects = demonstrate_generational_gc()\nprint(f\"\\n\u6f14\u793a\u5b8c\u6210\uff0c\u521b\u5efa\u4e86 {len(objects)} \u4e2a\u5bf9\u8c61\u7528\u4e8e\u6f14\u793a\")<\/code><\/pre>\n\n\n\n<p>\u5206\u4ee3\u6536\u96c6\u7b97\u6cd5\u7684\u7279\u70b9\uff1a<\/p>\n\n\n\n<p><strong>\u4f18\u70b9\uff1a<\/strong><\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>\u6027\u80fd\u9ad8\u6548\uff1a\u4e13\u6ce8\u4e8e\u56de\u6536\u5e74\u8f7b\u4ee3\uff0c\u51cf\u5c11\u6682\u505c\u65f6\u95f4<\/li>\n\n\n\n<li>\u9002\u5408\u5bf9\u8c61\u751f\u547d\u5468\u671f\u5206\u5e03\uff1a\u7b26\u5408\u5927\u591a\u6570\u7a0b\u5e8f\u7684\u5bf9\u8c61\u751f\u5b58\u6a21\u5f0f<\/li>\n\n\n\n<li>\u53ef\u914d\u7f6e\u6027\uff1a\u53ef\u4ee5\u8c03\u6574\u5404\u4ee3\u7684\u9608\u503c<\/li>\n<\/ul>\n\n\n\n<p><strong>\u7f3a\u70b9\uff1a<\/strong><\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>\u5b9e\u73b0\u590d\u6742\uff1a\u9700\u8981\u7ef4\u62a4\u4ee3\u9645\u4fe1\u606f<\/li>\n\n\n\n<li>\u664b\u5347\u5f00\u9500\uff1a\u5bf9\u8c61\u5728\u4ee3\u95f4\u79fb\u52a8\u6709\u5f00\u9500<\/li>\n\n\n\n<li>\u4ecd\u9700\u5904\u7406\u8001\u5e74\u4ee3\uff1a\u8001\u5e74\u4ee3\u6536\u96c6\u4ecd\u7136\u6602\u8d35<\/li>\n<\/ul>\n\n\n\n<h3 class=\"wp-block-heading\">3.5 \u5404\u8bed\u8a00\u5783\u573e\u56de\u6536\u5b9e\u73b0\u5bf9\u6bd4<\/h3>\n\n\n\n<pre class=\"wp-block-code\"><code># ============================================================================\n# \u5404\u8bed\u8a00\u5783\u573e\u56de\u6536\u673a\u5236\u5bf9\u6bd4\n# ============================================================================\n\ndef compare_gc_mechanisms():\n    \"\"\"\u6bd4\u8f83\u4e0d\u540c\u7f16\u7a0b\u8bed\u8a00\u7684\u5783\u573e\u56de\u6536\u673a\u5236\"\"\"\n\n    print(\"=== \u5404\u8bed\u8a00\u5783\u573e\u56de\u6536\u673a\u5236\u5bf9\u6bd4 ===\")\n\n    languages = {\n        \"Python\": {\n            \"\u4e3b\u8981\u7b97\u6cd5\": \"\u5f15\u7528\u8ba1\u6570 + \u5206\u4ee3\u6536\u96c6\",\n            \"\u7279\u70b9\": &#91;\n                \"\u4e3b\u8981\u4f7f\u7528\u5f15\u7528\u8ba1\u6570\uff0c\u5b9e\u65f6\u56de\u6536\",\n                \"\u5206\u4ee3\u6536\u96c6\u5904\u7406\u5faa\u73af\u5f15\u7528\",\n                \"\u53ef\u9009\u7684GC\u6a21\u5757\uff0c\u53ef\u624b\u52a8\u63a7\u5236\",\n                \"\u6709__del__\u65b9\u6cd5\u4f46\u4e0d\u5efa\u8bae\u4f9d\u8d56\"\n            ],\n            \"\u4f18\u70b9\": \"\u7b80\u5355\u3001\u5b9e\u65f6\u6027\u597d\",\n            \"\u7f3a\u70b9\": \"\u5f15\u7528\u8ba1\u6570\u6709\u5faa\u73af\u5f15\u7528\u95ee\u9898\uff0c\u9700\u8981\u5206\u4ee3\u6536\u96c6\u8f85\u52a9\"\n        },\n\n        \"Java\": {\n            \"\u4e3b\u8981\u7b97\u6cd5\": \"\u5206\u4ee3\u6536\u96c6\uff08\u591a\u79cd\u6536\u96c6\u5668\uff09\",\n            \"\u7279\u70b9\": &#91;\n                \"\u591a\u79cd\u6536\u96c6\u5668\uff1aSerial\u3001Parallel\u3001CMS\u3001G1\u3001ZGC\u3001Shenandoah\",\n                \"\u5f3a\u5206\u4ee3\u5047\u8bbe\uff0c\u8c03\u4f18\u53c2\u6570\u4e30\u5bcc\",\n                \"Stop-the-World\u95ee\u9898\uff0c\u4f46\u65b0\u6536\u96c6\u5668\u51cf\u5c11\u6682\u505c\",\n                \"Finalize\u65b9\u6cd5\u4f46\u5df2\u88ab\u5e9f\u5f03\"\n            ],\n            \"\u4f18\u70b9\": \"\u6210\u719f\u3001\u8c03\u4f18\u53c2\u6570\u591a\u3001\u541e\u5410\u91cf\u9ad8\",\n            \"\u7f3a\u70b9\": \"\u590d\u6742\u3001\u6682\u505c\u65f6\u95f4\u53ef\u80fd\u957f\"\n        },\n\n        \"JavaScript (V8)\": {\n            \"\u4e3b\u8981\u7b97\u6cd5\": \"\u5206\u4ee3\u6536\u96c6 + \u589e\u91cf\u6807\u8bb0\",\n            \"\u7279\u70b9\": &#91;\n                \"\u65b0\u751f\u4ee3\uff08Scavenge\uff09\u548c\u8001\u5e74\u4ee3\uff08Mark-Sweep-Compact\uff09\",\n                \"\u589e\u91cf\u6807\u8bb0\u51cf\u5c11\u6682\u505c\u65f6\u95f4\",\n                \"\u7a7a\u95f2\u65f6\u95f4\u6536\u96c6\uff08Idle-time GC\uff09\",\n                \"WeakRef\u548cFinalizationRegistry\"\n            ],\n            \"\u4f18\u70b9\": \"\u9002\u5408\u4ea4\u4e92\u5f0f\u5e94\u7528\uff0c\u6682\u505c\u65f6\u95f4\u77ed\",\n            \"\u7f3a\u70b9\": \"\u5185\u5b58\u788e\u7247\u53ef\u80fd\u591a\"\n        },\n\n        \"Go\": {\n            \"\u4e3b\u8981\u7b97\u6cd5\": \"\u5e76\u53d1\u6807\u8bb0-\u6e05\u9664 + \u4e09\u8272\u6807\u8bb0\",\n            \"\u7279\u70b9\": &#91;\n                \"\u5e76\u53d1\u6536\u96c6\uff0c\u6682\u505c\u65f6\u95f4\u6781\u77ed\uff08\u4e9a\u6beb\u79d2\u7ea7\uff09\",\n                \"\u4e09\u8272\u6807\u8bb0\u6cd5\u5b9e\u73b0\u5e76\u53d1\u5b89\u5168\",\n                \"\u5199\u5c4f\u969c\uff08write barrier\uff09\u7ef4\u62a4\u6b63\u786e\u6027\",\n                \"\u9003\u9038\u5206\u6790\u51cf\u5c11\u5806\u5206\u914d\"\n            ],\n            \"\u4f18\u70b9\": \"\u4f4e\u5ef6\u8fdf\uff0c\u9002\u5408\u5b9e\u65f6\u7cfb\u7edf\",\n            \"\u7f3a\u70b9\": \"CPU\u5f00\u9500\u8f83\u5927\"\n        },\n\n        \"C# (.NET)\": {\n            \"\u4e3b\u8981\u7b97\u6cd5\": \"\u5206\u4ee3\u6536\u96c6 + \u5e76\u884c\/\u5e76\u53d1\u6536\u96c6\",\n            \"\u7279\u70b9\": &#91;\n                \"\u5de5\u4f5c\u7ad9\u6a21\u5f0f\uff08\u4f4e\u5ef6\u8fdf\uff09\u548c\u670d\u52a1\u5668\u6a21\u5f0f\uff08\u9ad8\u541e\u5410\uff09\",\n                \"\u5927\u5bf9\u8c61\u5806\uff08LOH\uff09\u5355\u72ec\u7ba1\u7406\",\n                \"\u5f31\u5f15\u7528\u3001\u7ec8\u7ed3\u5668\",\n                \"\u53ef\u5f3a\u5236GC\u4f46\u4e00\u822c\u4e0d\u63a8\u8350\"\n            ],\n            \"\u4f18\u70b9\": \"\u5e73\u8861\u6027\u597d\uff0c\u8c03\u4f18\u7075\u6d3b\",\n            \"\u7f3a\u70b9\": \"\u590d\u6742\uff0c\u9700\u8981\u7406\u89e3CLR\"\n        }\n    }\n\n    print(\"\\n\u8be6\u7ec6\u5bf9\u6bd4:\")\n    for lang, info in languages.items():\n        print(f\"\\n{lang}:\")\n        print(f\"  \u4e3b\u8981\u7b97\u6cd5: {info&#91;'\u4e3b\u8981\u7b97\u6cd5']}\")\n        print(f\"  \u7279\u70b9:\")\n        for feature in info&#91;'\u7279\u70b9']:\n            print(f\"    \u2022 {feature}\")\n        print(f\"  \u4f18\u70b9: {info&#91;'\u4f18\u70b9']}\")\n        print(f\"  \u7f3a\u70b9: {info&#91;'\u7f3a\u70b9']}\")\n\n    print(\"\\n=== \u9009\u62e9\u6307\u5357 ===\")\n    print(\"1. \u5b9e\u65f6\u6027\u8981\u6c42\u9ad8 \u2192 Go\u3001ZGC\uff08Java\uff09\u3001V8\uff08JavaScript\uff09\")\n    print(\"2. \u541e\u5410\u91cf\u8981\u6c42\u9ad8 \u2192 Parallel GC\uff08Java\uff09\u3001\u670d\u52a1\u5668\u6a21\u5f0f\uff08.NET\uff09\")\n    print(\"3. \u7b80\u5355\u6613\u7528 \u2192 Python\uff08\u5f15\u7528\u8ba1\u6570\uff09\")\n    print(\"4. \u7cfb\u7edf\u7f16\u7a0b \u2192 Rust\uff08\u65e0GC\uff09\u3001C++\uff08\u624b\u52a8\u7ba1\u7406\uff09\")\n    print(\"5. \u5927\u89c4\u6a21\u5e94\u7528 \u2192 Java\/.NET\uff08\u6210\u719f\u3001\u5de5\u5177\u591a\uff09\")\n\n    print(\"\\n=== \u73b0\u4ee3GC\u8d8b\u52bf ===\")\n    print(\"1. \u4f4e\u5ef6\u8fdf\uff1a\u51cf\u5c11\u6682\u505c\u65f6\u95f4\uff08Go\u3001ZGC\u3001Shenandoah\uff09\")\n    print(\"2. \u5e76\u53d1\u6027\uff1a\u4e0e\u5e94\u7528\u7ebf\u7a0b\u5e76\u53d1\u6267\u884c\")\n    print(\"3. \u53ef\u9884\u6d4b\u6027\uff1a\u63d0\u4f9b\u6682\u505c\u65f6\u95f4\u4e0a\u9650\")\n    print(\"4. \u5185\u5b58\u6548\u7387\uff1a\u51cf\u5c11\u5185\u5b58\u5360\u7528\u548c\u788e\u7247\")\n    print(\"5. \u81ea\u9002\u5e94\u6027\uff1a\u6839\u636e\u5e94\u7528\u884c\u4e3a\u81ea\u52a8\u8c03\u6574\")\n\ncompare_gc_mechanisms()<\/code><\/pre>\n\n\n\n<p>\u5783\u573e\u56de\u6536\u8bbe\u8ba1\u8003\u8651\u56e0\u7d20\uff1a<\/p>\n\n\n\n<ol class=\"wp-block-list\">\n<li><strong>\u541e\u5410\u91cf vs \u5ef6\u8fdf<\/strong>\uff1a\u9ad8\u541e\u5410\u91cf\u8fd8\u662f\u4f4e\u5ef6\u8fdf\uff1f<\/li>\n\n\n\n<li><strong>\u5185\u5b58\u6548\u7387<\/strong>\uff1a\u5185\u5b58\u4f7f\u7528\u7387\u548c\u788e\u7247\u63a7\u5236<\/li>\n\n\n\n<li><strong>\u53ef\u9884\u6d4b\u6027<\/strong>\uff1a\u6682\u505c\u65f6\u95f4\u662f\u5426\u53ef\u9884\u6d4b<\/li>\n\n\n\n<li><strong>\u5e76\u53d1\u6027<\/strong>\uff1a\u662f\u5426\u652f\u6301\u5e76\u53d1\u6536\u96c6<\/li>\n\n\n\n<li><strong>\u53ef\u8c03\u6027<\/strong>\uff1a\u662f\u5426\u63d0\u4f9b\u8c03\u4f18\u53c2\u6570<\/li>\n\n\n\n<li><strong>\u517c\u5bb9\u6027<\/strong>\uff1a\u4e0e\u8bed\u8a00\u7279\u6027\u7684\u517c\u5bb9\u6027<\/li>\n<\/ol>\n\n\n\n<h2 class=\"wp-block-heading\">\u7b2c\u56db\u90e8\u5206\uff1a\u7efc\u5408\u5b9e\u6218 &#8211; \u5185\u5b58\u7ba1\u7406\u7cfb\u7edf\u6a21\u62df<\/h2>\n\n\n\n<pre class=\"wp-block-code\"><code># ============================================================================\n# \u7efc\u5408\u5b9e\u6218\uff1a\u7b80\u5355\u5185\u5b58\u7ba1\u7406\u7cfb\u7edf\u6a21\u62df\n# ============================================================================\n\nimport time\nimport random\nfrom enum import Enum\nfrom typing import List, Dict, Optional, Set\nfrom dataclasses import dataclass\n\nclass ObjectState(Enum):\n    \"\"\"\u5bf9\u8c61\u72b6\u6001\"\"\"\n    ALLOCATED = \"\u5df2\u5206\u914d\"\n    MARKED = \"\u5df2\u6807\u8bb0\"\n    FREE = \"\u7a7a\u95f2\"\n\n@dataclass\nclass MemoryObject:\n    \"\"\"\u5185\u5b58\u5bf9\u8c61\u6a21\u62df\"\"\"\n    id: int\n    size: int\n    state: ObjectState\n    generation: int = 0\n    marked: bool = False\n    ref_count: int = 0\n    references: List&#91;int] = None  # \u5f15\u7528\u7684\u5bf9\u8c61ID\u5217\u8868\n\n    def __post_init__(self):\n        if self.references is None:\n            self.references = &#91;]\n\n    def add_reference(self, obj_id: int):\n        \"\"\"\u6dfb\u52a0\u5f15\u7528\"\"\"\n        if obj_id not in self.references:\n            self.references.append(obj_id)\n\n    def remove_reference(self, obj_id: int):\n        \"\"\"\u79fb\u9664\u5f15\u7528\"\"\"\n        if obj_id in self.references:\n            self.references.remove(obj_id)\n\n    def __str__(self):\n        return f\"\u5bf9\u8c61{self.id}(\u5927\u5c0f:{self.size}, \u72b6\u6001:{self.state.value}, \u4ee3:{self.generation}, \u5f15\u7528\u6570:{self.ref_count})\"\n\nclass SimpleMemoryManager:\n    \"\"\"\u7b80\u5355\u5185\u5b58\u7ba1\u7406\u5668\"\"\"\n\n    def __init__(self, heap_size: int = 1024):\n        self.heap_size = heap_size\n        self.free_memory = heap_size\n        self.objects: Dict&#91;int, MemoryObject] = {}\n        self.next_id = 1\n        self.gc_threshold = heap_size * 0.7  # \u5f53\u4f7f\u7528\u8d85\u8fc770%\u65f6\u89e6\u53d1GC\n        self.gc_count = 0\n        self.allocated_bytes = 0\n\n        # \u5206\u4ee3\u7ba1\u7406\n        self.generations = {\n            0: {\"size\": 256, \"count\": 0},  # \u5e74\u8f7b\u4ee3\n            1: {\"size\": 512, \"count\": 0},  # \u8001\u5e74\u4ee3\n            2: {\"size\": 256, \"count\": 0}   # \u6c38\u4e45\u4ee3\n        }\n\n    def allocate(self, size: int, generation: int = 0) -&gt; Optional&#91;int]:\n        \"\"\"\u5206\u914d\u5185\u5b58\"\"\"\n\n        # \u68c0\u67e5\u662f\u5426\u6709\u8db3\u591f\u5185\u5b58\n        if size &gt; self.free_memory:\n            print(f\"\u5185\u5b58\u4e0d\u8db3\uff01\u8bf7\u6c42{size}\u5b57\u8282\uff0c\u53ef\u7528{self.free_memory}\u5b57\u8282\")\n            self.collect_garbage()  # \u5c1d\u8bd5\u5783\u573e\u56de\u6536\n            if size &gt; self.free_memory:\n                return None\n\n        # \u521b\u5efa\u5bf9\u8c61\n        obj_id = self.next_id\n        self.next_id += 1\n\n        obj = MemoryObject(\n            id=obj_id,\n            size=size,\n            state=ObjectState.ALLOCATED,\n            generation=generation\n        )\n\n        self.objects&#91;obj_id] = obj\n        self.free_memory -= size\n        self.allocated_bytes += size\n\n        # \u66f4\u65b0\u4ee3\u7edf\u8ba1\n        if generation in self.generations:\n            self.generations&#91;generation]&#91;\"count\"] += 1\n\n        print(f\"\u5206\u914d: {obj}\")\n\n        # \u68c0\u67e5\u662f\u5426\u9700\u8981GC\n        if self.allocated_bytes &gt; self.gc_threshold:\n            print(\"\u8fbe\u5230GC\u9608\u503c\uff0c\u89e6\u53d1\u5783\u573e\u56de\u6536...\")\n            self.collect_garbage()\n\n        return obj_id\n\n    def add_reference(self, from_obj_id: int, to_obj_id: int):\n        \"\"\"\u6dfb\u52a0\u5bf9\u8c61\u5f15\u7528\"\"\"\n        if from_obj_id in self.objects and to_obj_id in self.objects:\n            from_obj = self.objects&#91;from_obj_id]\n            to_obj = self.objects&#91;to_obj_id]\n\n            from_obj.add_reference(to_obj_id)\n            to_obj.ref_count += 1\n\n    def remove_reference(self, from_obj_id: int, to_obj_id: int):\n        \"\"\"\u79fb\u9664\u5bf9\u8c61\u5f15\u7528\"\"\"\n        if from_obj_id in self.objects and to_obj_id in self.objects:\n            from_obj = self.objects&#91;from_obj_id]\n            to_obj = self.objects&#91;to_obj_id]\n\n            from_obj.remove_reference(to_obj_id)\n            to_obj.ref_count -= 1\n\n            # \u5f15\u7528\u8ba1\u6570\u4e3a0\uff0c\u7acb\u5373\u56de\u6536\n            if to_obj.ref_count &lt;= 0 and to_obj.state == ObjectState.ALLOCATED:\n                print(f\"\u5f15\u7528\u8ba1\u6570\u4e3a0\uff0c\u7acb\u5373\u56de\u6536: {to_obj}\")\n                self._free_object(to_obj_id)\n\n    def _free_object(self, obj_id: int):\n        \"\"\"\u91ca\u653e\u5bf9\u8c61\"\"\"\n        if obj_id in self.objects:\n            obj = self.objects&#91;obj_id]\n\n            # \u91ca\u653e\u5185\u5b58\n            self.free_memory += obj.size\n            self.allocated_bytes -= obj.size\n\n            # \u66f4\u65b0\u4ee3\u7edf\u8ba1\n            if obj.generation in self.generations:\n                self.generations&#91;obj.generation]&#91;\"count\"] -= 1\n\n            # \u79fb\u9664\u5bf9\u8c61\n            del self.objects&#91;obj_id]\n            print(f\"\u91ca\u653e: \u5bf9\u8c61{obj_id}\")\n\n    def collect_garbage(self, algorithm: str = \"mark_sweep\"):\n        \"\"\"\u6267\u884c\u5783\u573e\u56de\u6536\"\"\"\n        self.gc_count += 1\n        print(f\"\\n=== \u7b2c{self.gc_count}\u6b21\u5783\u573e\u56de\u6536 ===\")\n\n        start_time = time.time()\n        freed_bytes = 0\n\n        if algorithm == \"ref_count\":\n            freed_bytes = self._ref_count_gc()\n        elif algorithm == \"mark_sweep\":\n            freed_bytes = self._mark_sweep_gc()\n        elif algorithm == \"generational\":\n            freed_bytes = self._generational_gc()\n\n        elapsed = (time.time() - start_time) * 1000  # \u6beb\u79d2\n\n        print(f\"\u56de\u6536\u5b8c\u6210: \u91ca\u653e{freed_bytes}\u5b57\u8282\uff0c\u8017\u65f6{elapsed:.2f}ms\")\n        self.print_stats()\n\n    def _ref_count_gc(self):\n        \"\"\"\u5f15\u7528\u8ba1\u6570GC\uff08\u5904\u7406\u5faa\u73af\u5f15\u7528\uff09\"\"\"\n        print(\"\u4f7f\u7528\u5f15\u7528\u8ba1\u6570GC\uff08\u5904\u7406\u5faa\u73af\u5f15\u7528\uff09...\")\n\n        # \u5f15\u7528\u8ba1\u6570\u65e0\u6cd5\u5904\u7406\u5faa\u73af\u5f15\u7528\uff0c\u8fd9\u91cc\u53ea\u662f\u6f14\u793a\n        # \u5728\u5b9e\u9645\u4e2d\uff0c\u5f15\u7528\u8ba1\u6570GC\u9700\u8981\u989d\u5916\u7684\u5faa\u73af\u68c0\u6d4b\n\n        freed_bytes = 0\n        objects_to_free = &#91;]\n\n        # \u627e\u51fa\u5f15\u7528\u8ba1\u6570\u4e3a0\u7684\u5bf9\u8c61\n        for obj_id, obj in self.objects.items():\n            if obj.ref_count == 0 and obj.state == ObjectState.ALLOCATED:\n                objects_to_free.append(obj_id)\n\n        # \u91ca\u653e\u5bf9\u8c61\n        for obj_id in objects_to_free:\n            obj = self.objects&#91;obj_id]\n            freed_bytes += obj.size\n            self._free_object(obj_id)\n\n        return freed_bytes\n\n    def _mark_sweep_gc(self):\n        \"\"\"\u6807\u8bb0-\u6e05\u9664GC\"\"\"\n        print(\"\u4f7f\u7528\u6807\u8bb0-\u6e05\u9664GC...\")\n\n        # \u6b65\u9aa41: \u6807\u8bb0\uff08\u4ece\u6839\u5bf9\u8c61\u5f00\u59cb\uff09\n        print(\"1. \u6807\u8bb0\u9636\u6bb5...\")\n        root_objects = self._find_roots()\n        marked = set()\n\n        def mark(obj_id: int):\n            if obj_id not in marked and obj_id in self.objects:\n                marked.add(obj_id)\n                obj = self.objects&#91;obj_id]\n                obj.marked = True\n\n                # \u9012\u5f52\u6807\u8bb0\u5f15\u7528\u7684\u5bf9\u8c61\n                for ref_id in obj.references:\n                    mark(ref_id)\n\n        for root_id in root_objects:\n            mark(root_id)\n\n        print(f\"   \u6807\u8bb0\u4e86{len(marked)}\u4e2a\u53ef\u8fbe\u5bf9\u8c61\")\n\n        # \u6b65\u9aa42: \u6e05\u9664\n        print(\"2. \u6e05\u9664\u9636\u6bb5...\")\n        freed_bytes = 0\n        objects_to_free = &#91;]\n\n        for obj_id, obj in list(self.objects.items()):\n            if obj_id not in marked and obj.state == ObjectState.ALLOCATED:\n                objects_to_free.append(obj_id)\n\n        # \u6e05\u9664\u6807\u8bb0\n        for obj in self.objects.values():\n            obj.marked = False\n\n        # \u91ca\u653e\u5bf9\u8c61\n        for obj_id in objects_to_free:\n            obj = self.objects&#91;obj_id]\n            freed_bytes += obj.size\n            self._free_object(obj_id)\n\n        print(f\"   \u6e05\u9664\u4e86{len(objects_to_free)}\u4e2a\u4e0d\u53ef\u8fbe\u5bf9\u8c61\")\n\n        return freed_bytes\n\n    def _generational_gc(self):\n        \"\"\"\u5206\u4ee3GC\"\"\"\n        print(\"\u4f7f\u7528\u5206\u4ee3GC...\")\n\n        freed_bytes = 0\n\n        # \u53ea\u6536\u96c6\u5e74\u8f7b\u4ee3\uff08\u7b2c0\u4ee3\uff09\n        young_objects = &#91;\n            obj_id for obj_id, obj in self.objects.items()\n            if obj.generation == 0 and obj.state == ObjectState.ALLOCATED\n        ]\n\n        print(f\"\u6536\u96c6\u5e74\u8f7b\u4ee3: {len(young_objects)}\u4e2a\u5bf9\u8c61\")\n\n        # \u6a21\u62df\u5206\u4ee3\u6536\u96c6\uff1a\u5e74\u8f7b\u4ee3\u4e2d\u7684\u5b58\u6d3b\u5bf9\u8c61\u664b\u5347\n        survivors = &#91;]\n        for obj_id in young_objects:\n            obj = self.objects&#91;obj_id]\n\n            # \u6a21\u62df\u5bf9\u8c61\u5b58\u6d3b\u5224\u65ad\uff08\u968f\u673a\uff09\n            if random.random() &gt; 0.7:  # 30%\u7684\u5bf9\u8c61\u5b58\u6d3b\n                # \u664b\u5347\u5230\u4e0b\u4e00\u4ee3\n                obj.generation = min(obj.generation + 1, 2)\n                survivors.append(obj_id)\n                print(f\"   \u5bf9\u8c61{obj_id}\u664b\u5347\u5230\u7b2c{obj.generation}\u4ee3\")\n            else:\n                # \u56de\u6536\n                freed_bytes += obj.size\n                self._free_object(obj_id)\n\n        print(f\"   \u5e74\u8f7b\u4ee3\u56de\u6536: {len(young_objects) - len(survivors)}\u4e2a\u5bf9\u8c61\u88ab\u56de\u6536\uff0c{len(survivors)}\u4e2a\u664b\u5347\")\n\n        return freed_bytes\n\n    def _find_roots(self) -&gt; List&#91;int]:\n        \"\"\"\u67e5\u627e\u6839\u5bf9\u8c61\uff08\u6a21\u62df\uff09\"\"\"\n        # \u5728\u5b9e\u9645\u7cfb\u7edf\u4e2d\uff0c\u6839\u5bf9\u8c61\u5305\u62ec\uff1a\n        # 1. \u5168\u5c40\u53d8\u91cf\n        # 2. \u6808\u4e0a\u7684\u5c40\u90e8\u53d8\u91cf\n        # 3. \u5bc4\u5b58\u5668\u4e2d\u7684\u53d8\u91cf\n        # \u8fd9\u91cc\u6211\u4eec\u7b80\u5355\u6a21\u62df\u4e00\u4e9b\u6839\u5bf9\u8c61\n\n        roots = &#91;]\n        for obj_id, obj in self.objects.items():\n            # \u6a21\u62df\uff1a\u67d0\u4e9b\u5bf9\u8c61\u662f\u6839\u5bf9\u8c61\n            if obj.id % 5 == 0:  # \u6bcf\u7b2c5\u4e2a\u5bf9\u8c61\u662f\u6839\u5bf9\u8c61\n                roots.append(obj_id)\n\n        return roots\n\n    def print_stats(self):\n        \"\"\"\u6253\u5370\u5185\u5b58\u7edf\u8ba1\"\"\"\n        print(f\"\\n\u5185\u5b58\u7edf\u8ba1:\")\n        print(f\"  \u5806\u5927\u5c0f: {self.heap_size}\u5b57\u8282\")\n        print(f\"  \u5df2\u5206\u914d: {self.allocated_bytes}\u5b57\u8282\")\n        print(f\"  \u7a7a\u95f2: {self.free_memory}\u5b57\u8282\")\n        print(f\"  \u4f7f\u7528\u7387: {self.allocated_bytes\/self.heap_size*100:.1f}%\")\n        print(f\"  \u5bf9\u8c61\u603b\u6570: {len(self.objects)}\")\n\n        print(f\"\\n\u5206\u4ee3\u7edf\u8ba1:\")\n        for gen, info in self.generations.items():\n            print(f\"  \u7b2c{gen}\u4ee3: {info&#91;'count']}\u4e2a\u5bf9\u8c61\")\n\ndef simulate_memory_management():\n    \"\"\"\u6a21\u62df\u5185\u5b58\u7ba1\u7406\u573a\u666f\"\"\"\n\n    print(\"=== \u5185\u5b58\u7ba1\u7406\u7cfb\u7edf\u6a21\u62df ===\\n\")\n\n    # \u521b\u5efa\u5185\u5b58\u7ba1\u7406\u5668\n    manager = SimpleMemoryManager(heap_size=512)\n\n    print(\"\u9636\u6bb51: \u5206\u914d\u5bf9\u8c61\")\n    objects = &#91;]\n\n    # \u5206\u914d\u4e00\u4e9b\u5bf9\u8c61\n    for i in range(10):\n        size = random.randint(10, 50)\n        obj_id = manager.allocate(size, generation=0)\n        if obj_id:\n            objects.append(obj_id)\n\n    print(\"\\n\u9636\u6bb52: \u521b\u5efa\u5f15\u7528\u5173\u7cfb\")\n    # \u521b\u5efa\u4e00\u4e9b\u5f15\u7528\u5173\u7cfb\n    for i in range(len(objects)):\n        if i + 1 &lt; len(objects):\n            manager.add_reference(objects&#91;i], objects&#91;i + 1])\n\n    # \u521b\u5efa\u5faa\u73af\u5f15\u7528\n    if len(objects) &gt;= 3:\n        manager.add_reference(objects&#91;0], objects&#91;2])\n        manager.add_reference(objects&#91;2], objects&#91;0])\n        print(\"\u521b\u5efa\u4e86\u5faa\u73af\u5f15\u7528: \u5bf9\u8c610 &lt;-&gt; \u5bf9\u8c612\")\n\n    print(\"\\n\u9636\u6bb53: \u624b\u52a8\u89e6\u53d1\u5783\u573e\u56de\u6536\")\n    manager.collect_garbage(\"mark_sweep\")\n\n    print(\"\\n\u9636\u6bb54: \u6a21\u62df\u5e94\u7528\u8fd0\u884c\uff08\u5206\u914d\u548c\u91ca\u653e\uff09\")\n    # \u6a21\u62df\u5e94\u7528\u8fd0\u884c\uff1a\u5206\u914d\u3001\u4f7f\u7528\u3001\u91ca\u653e\n    for step in range(5):\n        print(f\"\\n--- \u6b65\u9aa4{step + 1} ---\")\n\n        # \u5206\u914d\u65b0\u5bf9\u8c61\n        new_objects = &#91;]\n        for i in range(3):\n            size = random.randint(20, 40)\n            obj_id = manager.allocate(size, generation=0)\n            if obj_id:\n                new_objects.append(obj_id)\n\n        # \u968f\u673a\u79fb\u9664\u4e00\u4e9b\u5f15\u7528\n        if objects:\n            idx = random.randint(0, len(objects) - 1)\n            if idx + 1 &lt; len(objects):\n                manager.remove_reference(objects&#91;idx], objects&#91;idx + 1])\n\n        # \u6269\u5c55\u5bf9\u8c61\u5217\u8868\n        objects.extend(new_objects)\n\n    print(\"\\n\u9636\u6bb55: \u6700\u7ec8\u7edf\u8ba1\")\n    manager.print_stats()\n\n    # \u6700\u7ec8\u5783\u573e\u56de\u6536\n    print(\"\\n\u6700\u7ec8\u5783\u573e\u56de\u6536:\")\n    manager.collect_garbage(\"generational\")\n\n# \u8fd0\u884c\u6a21\u62df\nsimulate_memory_management()<\/code><\/pre>\n\n\n\n<p>\u8fd9\u4e2a\u7efc\u5408\u5b9e\u6218\u5c55\u793a\u4e86\uff1a<\/p>\n\n\n\n<ol class=\"wp-block-list\">\n<li><strong>\u5bf9\u8c61\u5206\u914d<\/strong>\uff1a\u6a21\u62df\u5185\u5b58\u5206\u914d\u8fc7\u7a0b<\/li>\n\n\n\n<li><strong>\u5f15\u7528\u7ba1\u7406<\/strong>\uff1a\u8ddf\u8e2a\u5bf9\u8c61\u95f4\u7684\u5f15\u7528\u5173\u7cfb<\/li>\n\n\n\n<li><strong>\u5783\u573e\u56de\u6536<\/strong>\uff1a\u5b9e\u73b0\u591a\u79cdGC\u7b97\u6cd5<\/li>\n\n\n\n<li><strong>\u5185\u5b58\u7edf\u8ba1<\/strong>\uff1a\u76d1\u63a7\u5185\u5b58\u4f7f\u7528\u60c5\u51b5<\/li>\n\n\n\n<li><strong>\u5206\u4ee3\u7ba1\u7406<\/strong>\uff1a\u6a21\u62df\u5206\u4ee3\u6536\u96c6\u7b56\u7565<\/li>\n<\/ol>\n\n\n\n<h2 class=\"wp-block-heading\">\u7b2c\u4e94\u90e8\u5206\uff1a\u9762\u8bd5\u5e38\u89c1\u95ee\u9898\u4e0e\u89e3\u7b54<\/h2>\n\n\n\n<h3 class=\"wp-block-heading\">\u95ee\u98981\uff1aPython\u4e2d\u7684<code>__init__<\/code>\u548c<code>__new__<\/code>\u6709\u4ec0\u4e48\u533a\u522b\uff1f<\/h3>\n\n\n\n<p><strong>\u7b54\u6848\uff1a<\/strong><br><code>__new__<\/code>\u548c<code>__init__<\/code>\u90fd\u662f\u6784\u9020\u5bf9\u8c61\u65f6\u8c03\u7528\u7684\u65b9\u6cd5\uff0c\u4f46\u4f5c\u7528\u4e0d\u540c\uff1a<\/p>\n\n\n\n<ol class=\"wp-block-list\">\n<li><strong><code>__new__<\/code>\u65b9\u6cd5<\/strong>\uff1a<\/li>\n<\/ol>\n\n\n\n<ul class=\"wp-block-list\">\n<li>\u662f\u4e00\u4e2a<strong>\u9759\u6001\u65b9\u6cd5<\/strong>\uff08\u867d\u7136\u4e0d\u7528<code>@staticmethod<\/code>\u88c5\u9970\uff09<\/li>\n\n\n\n<li>\u8d1f\u8d23<strong>\u521b\u5efa<\/strong>\u5bf9\u8c61\uff08\u5206\u914d\u5185\u5b58\uff09<\/li>\n\n\n\n<li>\u5fc5\u987b\u8fd4\u56de\u65b0\u521b\u5efa\u7684\u5bf9\u8c61\u5b9e\u4f8b<\/li>\n\n\n\n<li>\u7b2c\u4e00\u4e2a\u53c2\u6570\u662f<code>cls<\/code>\uff08\u7c7b\u672c\u8eab\uff09<\/li>\n\n\n\n<li>\u5728<code>__init__<\/code>\u4e4b\u524d\u8c03\u7528<\/li>\n<\/ul>\n\n\n\n<ol class=\"wp-block-list\">\n<li><strong><code>__init__<\/code>\u65b9\u6cd5<\/strong>\uff1a<\/li>\n<\/ol>\n\n\n\n<ul class=\"wp-block-list\">\n<li>\u662f\u4e00\u4e2a<strong>\u5b9e\u4f8b\u65b9\u6cd5<\/strong><\/li>\n\n\n\n<li>\u8d1f\u8d23<strong>\u521d\u59cb\u5316<\/strong>\u5df2\u521b\u5efa\u7684\u5bf9\u8c61<\/li>\n\n\n\n<li>\u4e0d\u8fd4\u56de\u4efb\u4f55\u503c\uff08\u5e94\u8be5\u8fd4\u56de<code>None<\/code>\uff09<\/li>\n\n\n\n<li>\u7b2c\u4e00\u4e2a\u53c2\u6570\u662f<code>self<\/code>\uff08\u65b0\u521b\u5efa\u7684\u5bf9\u8c61\u5b9e\u4f8b\uff09<\/li>\n\n\n\n<li>\u5728<code>__new__<\/code>\u4e4b\u540e\u8c03\u7528<\/li>\n<\/ul>\n\n\n\n<pre class=\"wp-block-code\"><code>class Example:\n    def __new__(cls, *args, **kwargs):\n        print(f\"__new__\u88ab\u8c03\u7528\uff0c\u7c7b: {cls}\")\n        instance = super().__new__(cls)  # \u521b\u5efa\u5b9e\u4f8b\n        return instance\n\n    def __init__(self, value):\n        print(f\"__init__\u88ab\u8c03\u7528\uff0c\u5b9e\u4f8b: {self}\")\n        self.value = value\n\n# \u4f7f\u7528\nobj = Example(42)\n# \u8f93\u51fa:\n# __new__\u88ab\u8c03\u7528\uff0c\u7c7b: &lt;class '__main__.Example'&gt;\n# __init__\u88ab\u8c03\u7528\uff0c\u5b9e\u4f8b: &lt;__main__.Example object at 0x...&gt;<\/code><\/pre>\n\n\n\n<p><strong>\u5e38\u89c1\u7528\u9014\uff1a<\/strong><\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li><code>__new__<\/code>\uff1a\u5355\u4f8b\u6a21\u5f0f\u3001\u4e0d\u53ef\u53d8\u5bf9\u8c61\u521b\u5efa\u3001\u5143\u7c7b\u7f16\u7a0b<\/li>\n\n\n\n<li><code>__init__<\/code>\uff1a\u666e\u901a\u5bf9\u8c61\u521d\u59cb\u5316<\/li>\n<\/ul>\n\n\n\n<h3 class=\"wp-block-heading\">\u95ee\u98982\uff1a\u4e3a\u4ec0\u4e48\u4e0d\u5e94\u8be5\u4f9d\u8d56Python\u7684<code>__del__<\/code>\u65b9\u6cd5\u8fdb\u884c\u91cd\u8981\u8d44\u6e90\u6e05\u7406\uff1f<\/h3>\n\n\n\n<p><strong>\u7b54\u6848\uff1a<\/strong><br>\u6709\u4ee5\u4e0b\u51e0\u4e2a\u539f\u56e0\uff1a<\/p>\n\n\n\n<ol class=\"wp-block-list\">\n<li><strong>\u8c03\u7528\u65f6\u673a\u4e0d\u786e\u5b9a<\/strong>\uff1a<\/li>\n<\/ol>\n\n\n\n<ul class=\"wp-block-list\">\n<li><code>__del__<\/code>\u7531\u5783\u573e\u56de\u6536\u5668\u8c03\u7528\uff0c\u65f6\u673a\u4e0d\u53ef\u9884\u6d4b<\/li>\n\n\n\n<li>\u7a0b\u5e8f\u9000\u51fa\u65f6\u53ef\u80fd\u4e0d\u4f1a\u8c03\u7528\u6240\u6709\u5bf9\u8c61\u7684<code>__del__<\/code><\/li>\n<\/ul>\n\n\n\n<ol class=\"wp-block-list\">\n<li><strong>\u5faa\u73af\u5f15\u7528\u95ee\u9898<\/strong>\uff1a<\/li>\n<\/ol>\n\n\n\n<ul class=\"wp-block-list\">\n<li>\u5faa\u73af\u5f15\u7528\u5bf9\u8c61\u53ef\u80fd\u6c38\u8fdc\u4e0d\u4f1a\u88ab\u56de\u6536<\/li>\n\n\n\n<li>\u56e0\u6b64<code>__del__<\/code>\u53ef\u80fd\u6c38\u8fdc\u4e0d\u4f1a\u88ab\u8c03\u7528<\/li>\n<\/ul>\n\n\n\n<ol class=\"wp-block-list\">\n<li><strong>\u5f02\u5e38\u5904\u7406\u56f0\u96be<\/strong>\uff1a<\/li>\n<\/ol>\n\n\n\n<ul class=\"wp-block-list\">\n<li><code>__del__<\/code>\u4e2d\u7684\u5f02\u5e38\u96be\u4ee5\u6355\u83b7\u548c\u5904\u7406<\/li>\n\n\n\n<li>\u53ef\u80fd\u5bfc\u81f4\u8d44\u6e90\u6cc4\u6f0f<\/li>\n<\/ul>\n\n\n\n<ol class=\"wp-block-list\">\n<li><strong>\u6267\u884c\u73af\u5883\u4e0d\u786e\u5b9a<\/strong>\uff1a<\/li>\n<\/ol>\n\n\n\n<ul class=\"wp-block-list\">\n<li><code>__del__<\/code>\u8c03\u7528\u65f6\uff0c\u67d0\u4e9b\u5168\u5c40\u72b6\u6001\u53ef\u80fd\u5df2\u7ecf\u5931\u6548<\/li>\n\n\n\n<li>\u4e0d\u80fd\u4f9d\u8d56\u5176\u4ed6\u6a21\u5757\u6216\u5168\u5c40\u53d8\u91cf<\/li>\n<\/ul>\n\n\n\n<p><strong>\u6b63\u786e\u505a\u6cd5\uff1a<\/strong><\/p>\n\n\n\n<pre class=\"wp-block-code\"><code># \u9519\u8bef\uff1a\u4f9d\u8d56__del__\nclass BadResource:\n    def __init__(self):\n        self.resource = acquire_resource()\n\n    def __del__(self):\n        release_resource(self.resource)  # \u53ef\u80fd\u6c38\u8fdc\u4e0d\u4f1a\u8c03\u7528\n\n# \u6b63\u786e\uff1a\u4f7f\u7528\u4e0a\u4e0b\u6587\u7ba1\u7406\u5668\nclass GoodResource:\n    def __init__(self):\n        self.resource = None\n\n    def __enter__(self):\n        self.resource = acquire_resource()\n        return self\n\n    def __exit__(self, exc_type, exc_val, exc_tb):\n        if self.resource:\n            release_resource(self.resource)\n        return False\n\n# \u4f7f\u7528\nwith GoodResource() as resource:\n    # \u4f7f\u7528\u8d44\u6e90\n    pass\n# \u8d44\u6e90\u4f1a\u88ab\u6b63\u786e\u91ca\u653e<\/code><\/pre>\n\n\n\n<h3 class=\"wp-block-heading\">\u95ee\u98983\uff1a\u89e3\u91caJava\u7684finalize()\u65b9\u6cd5\u4e3a\u4ec0\u4e48\u88ab\u5e9f\u5f03\uff1f<\/h3>\n\n\n\n<p><strong>\u7b54\u6848\uff1a<\/strong><br>Java 9\u5f00\u59cb\u5e9f\u5f03\u4e86<code>finalize()<\/code>\u65b9\u6cd5\uff0c\u539f\u56e0\u5305\u62ec\uff1a<\/p>\n\n\n\n<ol class=\"wp-block-list\">\n<li><strong>\u6027\u80fd\u95ee\u9898<\/strong>\uff1a<\/li>\n<\/ol>\n\n\n\n<ul class=\"wp-block-list\">\n<li>\u5bf9\u8c61\u9700\u8981\u4e24\u6b21GC\u624d\u80fd\u88ab\u56de\u6536\uff08\u7b2c\u4e00\u6b21\u8c03\u7528finalize\uff09<\/li>\n\n\n\n<li>\u589e\u52a0\u4e86GC\u7684\u590d\u6742\u5ea6<\/li>\n<\/ul>\n\n\n\n<ol class=\"wp-block-list\">\n<li><strong>\u4e0d\u53ef\u9884\u6d4b\u6027<\/strong>\uff1a<\/li>\n<\/ol>\n\n\n\n<ul class=\"wp-block-list\">\n<li>\u8c03\u7528\u65f6\u673a\u4e0d\u786e\u5b9a\uff08\u7c7b\u4f3cPython\u7684<code>__del__<\/code>\uff09<\/li>\n\n\n\n<li>\u53ef\u80fd\u6c38\u8fdc\u4e0d\u88ab\u8c03\u7528<\/li>\n<\/ul>\n\n\n\n<ol class=\"wp-block-list\">\n<li><strong>\u5b89\u5168\u6027\u95ee\u9898<\/strong>\uff1a<\/li>\n<\/ol>\n\n\n\n<ul class=\"wp-block-list\">\n<li>\u5728finalize\u4e2d\u53ef\u80fd&#8221;\u590d\u6d3b&#8221;\u5bf9\u8c61\uff08\u91cd\u65b0\u5efa\u7acb\u5f15\u7528\uff09<\/li>\n\n\n\n<li>\u5bfc\u81f4\u5185\u5b58\u6cc4\u6f0f<\/li>\n<\/ul>\n\n\n\n<ol class=\"wp-block-list\">\n<li><strong>\u5f02\u5e38\u95ee\u9898<\/strong>\uff1a<\/li>\n<\/ol>\n\n\n\n<ul class=\"wp-block-list\">\n<li>finalize\u4e2d\u7684\u5f02\u5e38\u53ef\u80fd\u4f7f\u5bf9\u8c61\u5904\u4e8e\u4e0d\u4e00\u81f4\u72b6\u6001<\/li>\n\n\n\n<li>\u5f02\u5e38\u4f1a\u88ab\u5ffd\u7565\uff0c\u96be\u4ee5\u8c03\u8bd5<\/li>\n<\/ul>\n\n\n\n<p><strong>\u66ff\u4ee3\u65b9\u6848\uff1a<\/strong><\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li><code>Cleaner<\/code>\u7c7b\uff08Java 9+\uff09\uff1a\u66f4\u5b89\u5168\u3001\u53ef\u9884\u6d4b\u7684\u6e05\u7406\u673a\u5236<\/li>\n\n\n\n<li><code>try-with-resources<\/code>\uff1a\u81ea\u52a8\u8d44\u6e90\u7ba1\u7406<\/li>\n\n\n\n<li>\u663e\u5f0f\u6e05\u7406\u65b9\u6cd5\uff08\u5982<code>close()<\/code>\uff09<\/li>\n<\/ul>\n\n\n\n<h3 class=\"wp-block-heading\">\u95ee\u98984\uff1a\u4ec0\u4e48\u662f\u5185\u5b58\u6cc4\u6f0f\uff1f\u5728\u5783\u573e\u56de\u6536\u8bed\u8a00\u4e2d\u5982\u4f55\u53d1\u751f\uff1f<\/h3>\n\n\n\n<p><strong>\u7b54\u6848\uff1a<\/strong><br>\u5185\u5b58\u6cc4\u6f0f\u662f\u6307\u7a0b\u5e8f\u4e0d\u518d\u4f7f\u7528\u7684\u5185\u5b58\u6ca1\u6709\u88ab\u91ca\u653e\u3002\u5373\u4f7f\u5728\u6709\u5783\u573e\u56de\u6536\u7684\u8bed\u8a00\u4e2d\uff0c\u4e5f\u53ef\u80fd\u53d1\u751f\u5185\u5b58\u6cc4\u6f0f\uff1a<\/p>\n\n\n\n<p><strong>\u5e38\u89c1\u7684\u5185\u5b58\u6cc4\u6f0f\u573a\u666f\uff1a<\/strong><\/p>\n\n\n\n<ol class=\"wp-block-list\">\n<li><strong>\u9759\u6001\u96c6\u5408\u7c7b<\/strong>\uff1a<\/li>\n<\/ol>\n\n\n\n<pre class=\"wp-block-code\"><code>   public class MemoryLeak {\n       private static final List&lt;Object&gt; CACHE = new ArrayList&lt;&gt;();\n\n       public void addToCache(Object obj) {\n           CACHE.add(obj);  \/\/ \u5bf9\u8c61\u6c38\u8fdc\u4e0d\u4f1a\u88ab\u79fb\u9664\n       }\n   }<\/code><\/pre>\n\n\n\n<ol start=\"2\" class=\"wp-block-list\">\n<li><strong>\u76d1\u542c\u5668\u672a\u6ce8\u9500<\/strong>\uff1a<\/li>\n<\/ol>\n\n\n\n<pre class=\"wp-block-code\"><code>   button.addActionListener(listener);\n   \/\/ \u5fd8\u8bb0\uff1abutton.removeActionListener(listener);<\/code><\/pre>\n\n\n\n<ol start=\"3\" class=\"wp-block-list\">\n<li><strong>\u7f13\u5b58\u65e0\u6e05\u7406\u7b56\u7565<\/strong>\uff1a<\/li>\n<\/ol>\n\n\n\n<pre class=\"wp-block-code\"><code>   cache = {}\n\n   def process_data(key, data):\n       cache&#91;key] = data  # \u4e0d\u65ad\u6dfb\u52a0\uff0c\u4ece\u4e0d\u6e05\u7406<\/code><\/pre>\n\n\n\n<ol start=\"4\" class=\"wp-block-list\">\n<li><strong>\u5185\u90e8\u7c7b\u5f15\u7528\u5916\u90e8\u7c7b<\/strong>\uff1a<\/li>\n<\/ol>\n\n\n\n<pre class=\"wp-block-code\"><code>   public class Outer {\n       private byte&#91;] largeData = new byte&#91;1000000];\n\n       public Runnable createTask() {\n           return new Runnable() {  \/\/ \u533f\u540d\u5185\u90e8\u7c7b\u9690\u5f0f\u5f15\u7528Outer.this\n               public void run() {\n                   \/\/ \u5373\u4f7fOuter\u4e0d\u518d\u9700\u8981\uff0clargeData\u4e5f\u65e0\u6cd5\u88ab\u56de\u6536\n               }\n           };\n       }\n   }<\/code><\/pre>\n\n\n\n<ol start=\"5\" class=\"wp-block-list\">\n<li><strong>\u7ebf\u7a0b\u5c40\u90e8\u53d8\u91cf\u672a\u6e05\u7406<\/strong>\uff1a<\/li>\n<\/ol>\n\n\n\n<pre class=\"wp-block-code\"><code>   ThreadLocal&lt;byte&#91;]&gt; threadLocal = new ThreadLocal&lt;&gt;();\n   threadLocal.set(new byte&#91;1000000]);\n   \/\/ \u5fd8\u8bb0\uff1athreadLocal.remove();<\/code><\/pre>\n\n\n\n<p><strong>\u68c0\u6d4b\u548c\u9884\u9632\uff1a<\/strong><\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>\u4f7f\u7528\u5185\u5b58\u5206\u6790\u5de5\u5177\uff08VisualVM\u3001MAT\u3001Python\u7684tracemalloc\uff09<\/li>\n\n\n\n<li>\u5b9a\u671f\u8fdb\u884c\u4ee3\u7801\u5ba1\u67e5<\/li>\n\n\n\n<li>\u4f7f\u7528\u5f31\u5f15\u7528\uff08WeakReference\uff09\u66ff\u4ee3\u5f3a\u5f15\u7528<\/li>\n\n\n\n<li>\u5b9e\u73b0\u5408\u7406\u7684\u7f13\u5b58\u6e05\u7406\u7b56\u7565<\/li>\n<\/ul>\n\n\n\n<h3 class=\"wp-block-heading\">\u95ee\u98985\uff1a\u89e3\u91caGo\u8bed\u8a00\u7684\u5783\u573e\u56de\u6536\u5668\u5982\u4f55\u5b9e\u73b0\u4f4e\u5ef6\u8fdf\uff1f<\/h3>\n\n\n\n<p><strong>\u7b54\u6848\uff1a<\/strong><br>Go\u8bed\u8a00\u7684GC\u4ee5\u4f4e\u5ef6\u8fdf\u8457\u79f0\uff0c\u4e3b\u8981\u901a\u8fc7\u4ee5\u4e0b\u6280\u672f\u5b9e\u73b0\uff1a<\/p>\n\n\n\n<ol class=\"wp-block-list\">\n<li><strong>\u5e76\u53d1\u6807\u8bb0<\/strong>\uff1a<\/li>\n<\/ol>\n\n\n\n<ul class=\"wp-block-list\">\n<li>\u6807\u8bb0\u9636\u6bb5\u4e0e\u5e94\u7528\u5e76\u53d1\u6267\u884c<\/li>\n\n\n\n<li>\u4f7f\u7528\u5199\u5c4f\u969c\uff08write barrier\uff09\u4fdd\u6301\u4e00\u81f4\u6027<\/li>\n\n\n\n<li>\u51cf\u5c11&#8221;Stop-the-World&#8221;\u6682\u505c\u65f6\u95f4<\/li>\n<\/ul>\n\n\n\n<ol class=\"wp-block-list\">\n<li><strong>\u4e09\u8272\u6807\u8bb0\u6cd5<\/strong>\uff1a<\/li>\n<\/ol>\n\n\n\n<ul class=\"wp-block-list\">\n<li>\u767d\u8272\uff1a\u5c1a\u672a\u8bbf\u95ee\u7684\u5bf9\u8c61<\/li>\n\n\n\n<li>\u7070\u8272\uff1a\u5df2\u8bbf\u95ee\u4f46\u5b50\u5bf9\u8c61\u672a\u8bbf\u95ee<\/li>\n\n\n\n<li>\u9ed1\u8272\uff1a\u5df2\u8bbf\u95ee\u4e14\u5b50\u5bf9\u8c61\u5df2\u8bbf\u95ee<\/li>\n\n\n\n<li>\u5141\u8bb8\u5e76\u53d1\u6807\u8bb0\u548c\u4fee\u6539<\/li>\n<\/ul>\n\n\n\n<ol class=\"wp-block-list\">\n<li><strong>\u589e\u91cf\u56de\u6536<\/strong>\uff1a<\/li>\n<\/ol>\n\n\n\n<ul class=\"wp-block-list\">\n<li>GC\u5de5\u4f5c\u88ab\u5206\u6210\u5c0f\u7247\u6bb5<\/li>\n\n\n\n<li>\u4e0e\u5e94\u7528\u4ea4\u66ff\u6267\u884c<\/li>\n\n\n\n<li>\u51cf\u5c11\u5355\u6b21\u6682\u505c\u65f6\u95f4<\/li>\n<\/ul>\n\n\n\n<ol class=\"wp-block-list\">\n<li><strong>\u9003\u9038\u5206\u6790<\/strong>\uff1a<\/li>\n<\/ol>\n\n\n\n<ul class=\"wp-block-list\">\n<li>\u7f16\u8bd1\u65f6\u5206\u6790\u5bf9\u8c61\u4f5c\u7528\u57df<\/li>\n\n\n\n<li>\u5c06\u9002\u5408\u7684\u5bf9\u8c61\u5206\u914d\u5728\u6808\u4e0a<\/li>\n\n\n\n<li>\u51cf\u5c11\u5806\u5206\u914d\u548cGC\u538b\u529b<\/li>\n<\/ul>\n\n\n\n<ol class=\"wp-block-list\">\n<li><strong>GC\u8c03\u4f18\u53c2\u6570<\/strong>\uff1a<\/li>\n<\/ol>\n\n\n\n<ul class=\"wp-block-list\">\n<li><code>GOGC<\/code>\uff1a\u63a7\u5236\u89e6\u53d1GC\u7684\u5806\u589e\u957f\u6bd4\u4f8b<\/li>\n\n\n\n<li>\u53ef\u8bbe\u7f6e\u76ee\u6807\u6682\u505c\u65f6\u95f4<\/li>\n<\/ul>\n\n\n\n<pre class=\"wp-block-code\"><code>\/\/ Go\u7684GC\u662f\u81ea\u52a8\u7684\uff0c\u4f46\u53ef\u4ee5\u8c03\u6574\n\/\/ \u8bbe\u7f6e\u73af\u5883\u53d8\u91cf\u63a7\u5236GC\u884c\u4e3a\n\/\/ GOGC=100  # \u9ed8\u8ba4\u503c\uff0c\u5806\u589e\u957f100%\u65f6\u89e6\u53d1GC\n\/\/ GOGC=off  # \u5173\u95edGC\uff08\u4e0d\u63a8\u8350\uff09\n\n\/\/ \u53ef\u4ee5\u624b\u52a8\u89e6\u53d1GC\uff08\u901a\u5e38\u4e0d\u9700\u8981\uff09\nimport \"runtime\"\nruntime.GC()<\/code><\/pre>\n\n\n\n<p><strong>\u6027\u80fd\u7279\u70b9\uff1a<\/strong><\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>\u6682\u505c\u65f6\u95f4\u901a\u5e38\u5c0f\u4e8e1\u6beb\u79d2<\/li>\n\n\n\n<li>\u9002\u5408\u5b9e\u65f6\u7cfb\u7edf\u548c\u9ad8\u5e76\u53d1\u5e94\u7528<\/li>\n\n\n\n<li>\u541e\u5410\u91cf\u53ef\u80fd\u4f4e\u4e8e\u5176\u4ed6GC\uff08\u6743\u8861\u7684\u7ed3\u679c\uff09<\/li>\n<\/ul>\n\n\n\n<h2 class=\"wp-block-heading\">\u7b2c\u516d\u90e8\u5206\uff1a\u5b66\u4e60\u603b\u7ed3\u4e0e\u4e0b\u4e00\u6b65<\/h2>\n\n\n\n<h3 class=\"wp-block-heading\">\u5bf9\u8c61\u751f\u547d\u5468\u671f\u7ba1\u7406\u6838\u5fc3\u603b\u7ed3<\/h3>\n\n\n\n<p><strong>\u6784\u9020\u65b9\u6cd5\u5173\u952e\u70b9\uff1a<\/strong><\/p>\n\n\n\n<ol class=\"wp-block-list\">\n<li>\u786e\u4fdd\u5bf9\u8c61\u6784\u9020\u540e\u5904\u4e8e\u6709\u6548\u72b6\u6001<\/li>\n\n\n\n<li>\u8fdb\u884c\u53c2\u6570\u9a8c\u8bc1\u548c\u521d\u59cb\u5316<\/li>\n\n\n\n<li>\u907f\u514d\u5728\u6784\u9020\u65b9\u6cd5\u4e2d\u6267\u884c\u53ef\u80fd\u5931\u8d25\u7684\u64cd\u4f5c<\/li>\n\n\n\n<li>\u8003\u8651\u4f7f\u7528\u5de5\u5382\u65b9\u6cd5\u63d0\u4f9b\u7075\u6d3b\u7684\u6784\u9020\u65b9\u5f0f<\/li>\n<\/ol>\n\n\n\n<p><strong>\u6790\u6784\u65b9\u6cd5\u5173\u952e\u70b9\uff1a<\/strong><\/p>\n\n\n\n<ol class=\"wp-block-list\">\n<li>\u4e0d\u8981\u4f9d\u8d56\u6790\u6784\u65b9\u6cd5\u8fdb\u884c\u91cd\u8981\u8d44\u6e90\u6e05\u7406<\/li>\n\n\n\n<li>\u4f7f\u7528RAII\u6a21\u5f0f\u6216\u4e0a\u4e0b\u6587\u7ba1\u7406\u5668<\/li>\n\n\n\n<li>\u663e\u5f0f\u8d44\u6e90\u7ba1\u7406\u6bd4\u9690\u5f0f\u66f4\u53ef\u9760<\/li>\n\n\n\n<li>\u6ce8\u610f\u5faa\u73af\u5f15\u7528\u95ee\u9898<\/li>\n<\/ol>\n\n\n\n<p><strong>\u5783\u573e\u56de\u6536\u5173\u952e\u70b9\uff1a<\/strong><\/p>\n\n\n\n<ol class=\"wp-block-list\">\n<li>\u7406\u89e3\u4e0d\u540cGC\u7b97\u6cd5\u7684\u4f18\u7f3a\u70b9<\/li>\n\n\n\n<li>\u77e5\u9053\u5982\u4f55\u5728\u6709GC\u7684\u8bed\u8a00\u4e2d\u907f\u514d\u5185\u5b58\u6cc4\u6f0f<\/li>\n\n\n\n<li>\u6839\u636e\u5e94\u7528\u9700\u6c42\u9009\u62e9\u5408\u9002\u7684\u8bed\u8a00\/GC<\/li>\n\n\n\n<li>\u76d1\u63a7\u548c\u8c03\u4f18GC\u6027\u80fd<\/li>\n<\/ol>\n\n\n\n<h3 class=\"wp-block-heading\">\u8fdb\u9636\u5b66\u4e60\u8def\u7ebf<\/h3>\n\n\n\n<ol class=\"wp-block-list\">\n<li><strong>\u6df1\u5165\u7406\u89e3\u5185\u5b58\u7ba1\u7406<\/strong><\/li>\n<\/ol>\n\n\n\n<ul class=\"wp-block-list\">\n<li>\u64cd\u4f5c\u7cfb\u7edf\u5185\u5b58\u7ba1\u7406\u539f\u7406<\/li>\n\n\n\n<li>\u865a\u62df\u5185\u5b58\u3001\u5206\u9875\u3001\u5206\u6bb5<\/li>\n\n\n\n<li>\u5185\u5b58\u5206\u914d\u7b97\u6cd5\uff08\u9996\u6b21\u9002\u5e94\u3001\u6700\u4f73\u9002\u5e94\u7b49\uff09<\/li>\n<\/ul>\n\n\n\n<ol class=\"wp-block-list\">\n<li><strong>\u9ad8\u7ea7\u5783\u573e\u56de\u6536\u7b97\u6cd5<\/strong><\/li>\n<\/ol>\n\n\n\n<ul class=\"wp-block-list\">\n<li>\u589e\u91cf\u5f0fGC<\/li>\n\n\n\n<li>\u5e76\u53d1GC<\/li>\n\n\n\n<li>\u533a\u57df\u5f0fGC\uff08\u5982G1\u3001ZGC\uff09<\/li>\n\n\n\n<li>\u5f15\u7528\u7c7b\u578b\uff08\u5f3a\u3001\u8f6f\u3001\u5f31\u3001\u865a\u5f15\u7528\uff09<\/li>\n<\/ul>\n\n\n\n<ol class=\"wp-block-list\">\n<li><strong>\u6027\u80fd\u5206\u6790\u4e0e\u8c03\u4f18<\/strong><\/li>\n<\/ol>\n\n\n\n<ul class=\"wp-block-list\">\n<li>\u5185\u5b58\u5206\u6790\u5de5\u5177\u4f7f\u7528<\/li>\n\n\n\n<li>GC\u65e5\u5fd7\u5206\u6790<\/li>\n\n\n\n<li>\u5185\u5b58\u6cc4\u6f0f\u68c0\u6d4b<\/li>\n\n\n\n<li>\u6027\u80fd\u57fa\u51c6\u6d4b\u8bd5<\/li>\n<\/ul>\n\n\n\n<ol class=\"wp-block-list\">\n<li><strong>\u7cfb\u7edf\u8bbe\u8ba1\u4e2d\u7684\u5e94\u7528<\/strong><\/li>\n<\/ol>\n\n\n\n<ul class=\"wp-block-list\">\n<li>\u7f13\u5b58\u7cfb\u7edf\u8bbe\u8ba1<\/li>\n\n\n\n<li>\u8fde\u63a5\u6c60\u7ba1\u7406<\/li>\n\n\n\n<li>\u5927\u6570\u636e\u5904\u7406\u4e2d\u7684\u5185\u5b58\u4f18\u5316<\/li>\n\n\n\n<li>\u5206\u5e03\u5f0f\u7cfb\u7edf\u4e2d\u7684\u5185\u5b58\u7ba1\u7406<\/li>\n<\/ul>\n\n\n\n<h3 class=\"wp-block-heading\">\u5b9e\u8df5\u9879\u76ee\u5efa\u8bae<\/h3>\n\n\n\n<ol class=\"wp-block-list\">\n<li><strong>\u5b9e\u73b0\u7b80\u5355\u7684\u5783\u573e\u56de\u6536\u5668<\/strong><\/li>\n<\/ol>\n\n\n\n<ul class=\"wp-block-list\">\n<li>\u9009\u62e9\u4e00\u79cd\u7b97\u6cd5\u5b9e\u73b0<\/li>\n\n\n\n<li>\u5904\u7406\u5faa\u73af\u5f15\u7528<\/li>\n\n\n\n<li>\u6dfb\u52a0\u5206\u4ee3\u652f\u6301<\/li>\n<\/ul>\n\n\n\n<ol class=\"wp-block-list\">\n<li><strong>\u5185\u5b58\u5206\u6790\u5de5\u5177\u5f00\u53d1<\/strong><\/li>\n<\/ol>\n\n\n\n<ul class=\"wp-block-list\">\n<li>\u5bf9\u8c61\u5206\u914d\u8ddf\u8e2a<\/li>\n\n\n\n<li>\u5f15\u7528\u5173\u7cfb\u53ef\u89c6\u5316<\/li>\n\n\n\n<li>\u5185\u5b58\u6cc4\u6f0f\u68c0\u6d4b<\/li>\n<\/ul>\n\n\n\n<ol class=\"wp-block-list\">\n<li><strong>\u9ad8\u6027\u80fd\u7f13\u5b58\u7cfb\u7edf<\/strong><\/li>\n<\/ol>\n\n\n\n<ul class=\"wp-block-list\">\n<li>\u5b9e\u73b0LRU\/LFU\u7f13\u5b58<\/li>\n\n\n\n<li>\u6dfb\u52a0\u5f31\u5f15\u7528\u652f\u6301<\/li>\n\n\n\n<li>\u5185\u5b58\u9650\u5236\u548c\u6e05\u7406\u7b56\u7565<\/li>\n<\/ul>\n\n\n\n<ol class=\"wp-block-list\">\n<li><strong>\u8d44\u6e90\u6c60\u7ba1\u7406\u7cfb\u7edf<\/strong><\/li>\n<\/ol>\n\n\n\n<ul class=\"wp-block-list\">\n<li>\u6570\u636e\u5e93\u8fde\u63a5\u6c60<\/li>\n\n\n\n<li>\u7ebf\u7a0b\u6c60<\/li>\n\n\n\n<li>\u5bf9\u8c61\u6c60\u6a21\u5f0f\u5b9e\u73b0<\/li>\n<\/ul>\n\n\n\n<h3 class=\"wp-block-heading\">\u6700\u7ec8\u601d\u8003<\/h3>\n\n\n\n<p>\u5bf9\u8c61\u751f\u547d\u5468\u671f\u7ba1\u7406\u662f\u6bcf\u4e2a\u7a0b\u5e8f\u5458\u5fc5\u987b\u638c\u63e1\u7684\u6838\u5fc3\u6280\u80fd\u3002\u5b83\u4e0d\u4ec5\u662f\u6280\u672f\u95ee\u9898\uff0c\u66f4\u662f\u8bbe\u8ba1\u54f2\u5b66\u548c\u5de5\u7a0b\u5b9e\u8df5\u7684\u4f53\u73b0\u3002\u4f18\u79c0\u7684\u7a0b\u5e8f\u5458\u5e94\u8be5\uff1a<\/p>\n\n\n\n<ol class=\"wp-block-list\">\n<li><strong>\u7406\u89e3\u5e95\u5c42\u539f\u7406<\/strong>\uff1a\u77e5\u9053\u8bed\u8a00\u7279\u6027\u80cc\u540e\u7684\u5b9e\u73b0\u673a\u5236<\/li>\n\n\n\n<li><strong>\u9009\u62e9\u5408\u9002\u7684\u5de5\u5177<\/strong>\uff1a\u6839\u636e\u9700\u6c42\u9009\u62e9\u5408\u9002\u7684\u5185\u5b58\u7ba1\u7406\u7b56\u7565<\/li>\n\n\n\n<li><strong>\u7f16\u5199\u5065\u58ee\u7684\u4ee3\u7801<\/strong>\uff1a\u8003\u8651\u8fb9\u754c\u60c5\u51b5\u548c\u5f02\u5e38\u5904\u7406<\/li>\n\n\n\n<li><strong>\u6301\u7eed\u5b66\u4e60\u548c\u4f18\u5316<\/strong>\uff1a\u5173\u6ce8\u65b0\u6280\u672f\u548c\u6700\u4f73\u5b9e\u8df5<\/li>\n<\/ol>\n\n\n\n<p>\u8bb0\u4f4f\uff1a\u5185\u5b58\u7ba1\u7406\u4e0d\u662f\u5b64\u7acb\u7684\uff0c\u5b83\u4e0e\u5e76\u53d1\u3001\u6027\u80fd\u3001\u53ef\u7ef4\u62a4\u6027\u7b49\u5bc6\u5207\u76f8\u5173\u3002\u771f\u6b63\u7684\u638c\u63e1\u9700\u8981\u7406\u8bba\u5b66\u4e60\u548c\u5b9e\u8df5\u7ecf\u9a8c\u7684\u7ed3\u5408\u3002\u901a\u8fc7\u4e0d\u65ad\u5b9e\u8df5\u548c\u53cd\u601d\uff0c\u4f60\u4f1a\u9010\u6e10\u5f62\u6210\u81ea\u5df1\u7684\u8bbe\u8ba1\u76f4\u89c9\u548c\u5de5\u7a0b\u5224\u65ad\u3002<\/p>\n\n\n\n<p>\u7b2c\u56db\u5341\u4e94\u8bfe\uff1a\u9762\u5411\u5bf9\u8c61\u4e2d\u5bf9\u8c61\u751f\u547d\u5468\u671f\u7ba1\u7406\u6df1\u5ea6\u89e3\u6790\uff01\u5b8c<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">\u7b2c\u56db\u5341\u516d\u8bfe\uff1a\u7c7b\u6210\u5458\u7684\u8bbf\u95ee\u63a7\u5236\u4e0e\u5c01\u88c5\u827a\u672f<\/h2>\n\n\n\n<h2 class=\"wp-block-heading\">\u524d\u8a00\uff1a\u5c01\u88c5\u7684\u54f2\u5b66\u610f\u4e49<\/h2>\n\n\n\n<p>\u5728\u9762\u5411\u5bf9\u8c61\u7f16\u7a0b\u4e2d\uff0c\u5c01\u88c5\uff08Encapsulation\uff09\u4e0d\u4ec5\u4ec5\u662f\u4e00\u79cd\u6280\u672f\uff0c\u66f4\u662f\u4e00\u79cd\u8bbe\u8ba1\u54f2\u5b66\u3002\u5b83\u901a\u8fc7\u9690\u85cf\u5bf9\u8c61\u7684\u5185\u90e8\u5b9e\u73b0\u7ec6\u8282\uff0c\u4ec5\u5bf9\u5916\u66b4\u9732\u5fc5\u8981\u7684\u63a5\u53e3\uff0c\u4ece\u800c\u5b9e\u73b0\u4e86\u4fe1\u606f\u9690\u85cf\u548c\u6a21\u5757\u5316\u3002\u5c01\u88c5\u7684\u6838\u5fc3\u76ee\u7684\u662f\u964d\u4f4e\u7cfb\u7edf\u7684\u590d\u6742\u5ea6\uff0c\u63d0\u9ad8\u4ee3\u7801\u7684\u53ef\u7ef4\u62a4\u6027\u548c\u53ef\u91cd\u7528\u6027\u3002<\/p>\n\n\n\n<p>\u4eca\u5929\uff0c\u6211\u4eec\u5c06\u6df1\u5165\u63a2\u8ba8\u8bbf\u95ee\u63a7\u5236\u7684\u4e09\u4e2a\u6838\u5fc3\u7ea7\u522b\uff1a\u516c\u6709\uff08public\uff09\u3001\u79c1\u6709\uff08private\uff09\u548c\u4fdd\u62a4\uff08protected\uff09\uff0c\u5e76\u7406\u89e3\u5982\u4f55\u901a\u8fc7\u6b63\u786e\u7684\u5c01\u88c5\u6765\u6784\u5efa\u5065\u58ee\u7684\u9762\u5411\u5bf9\u8c61\u7cfb\u7edf\u3002<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">\u7b2c\u4e00\u90e8\u5206\uff1a\u8bbf\u95ee\u63a7\u5236\u7684\u57fa\u672c\u6982\u5ff5<\/h2>\n\n\n\n<h3 class=\"wp-block-heading\">1.1 \u4ec0\u4e48\u662f\u8bbf\u95ee\u63a7\u5236\uff1f<\/h3>\n\n\n\n<p>\u8bbf\u95ee\u63a7\u5236\uff08Access Control\uff09\u662f\u6307\u901a\u8fc7\u7279\u5b9a\u7684\u8bed\u6cd5\u89c4\u5219\uff0c\u9650\u5236\u7c7b\u6210\u5458\uff08\u5c5e\u6027\u548c\u65b9\u6cd5\uff09\u7684\u53ef\u89c1\u6027\u548c\u53ef\u8bbf\u95ee\u6027\u3002\u5b83\u5b9a\u4e49\u4e86\u54ea\u4e9b\u6210\u5458\u53ef\u4ee5\u4ece\u7c7b\u7684\u5916\u90e8\u8bbf\u95ee\uff0c\u54ea\u4e9b\u53ea\u80fd\u5728\u7c7b\u7684\u5185\u90e8\u4f7f\u7528\u3002<\/p>\n\n\n\n<p>\u8bbf\u95ee\u63a7\u5236\u7684\u4e09\u4e2a\u57fa\u672c\u7ea7\u522b\uff1a<\/p>\n\n\n\n<ol class=\"wp-block-list\">\n<li><strong>\u516c\u6709\uff08public\uff09<\/strong>\uff1a\u4efb\u4f55\u5730\u65b9\u90fd\u53ef\u4ee5\u8bbf\u95ee<\/li>\n\n\n\n<li><strong>\u79c1\u6709\uff08private\uff09<\/strong>\uff1a\u53ea\u6709\u7c7b\u5185\u90e8\u53ef\u4ee5\u8bbf\u95ee<\/li>\n\n\n\n<li><strong>\u4fdd\u62a4\uff08protected\uff09<\/strong>\uff1a\u7c7b\u5185\u90e8\u548c\u6d3e\u751f\u7c7b\u53ef\u4ee5\u8bbf\u95ee<\/li>\n<\/ol>\n\n\n\n<h3 class=\"wp-block-heading\">1.2 \u5404\u8bed\u8a00\u4e2d\u7684\u8bbf\u95ee\u63a7\u5236\u5b9e\u73b0<\/h3>\n\n\n\n<p>\u4e0d\u540c\u7684\u7f16\u7a0b\u8bed\u8a00\u5bf9\u8bbf\u95ee\u63a7\u5236\u7684\u5b9e\u73b0\u548c\u652f\u6301\u7a0b\u5ea6\u4e0d\u540c\u3002\u4e0b\u9762\u6211\u4eec\u901a\u8fc7\u4ee3\u7801\u793a\u4f8b\u6765\u5bf9\u6bd4\u51e0\u79cd\u4e3b\u6d41\u8bed\u8a00\u7684\u8bbf\u95ee\u63a7\u5236\u673a\u5236\u3002<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code># ============================================================================\n# Python\u7684\u8bbf\u95ee\u63a7\u5236\uff08\u57fa\u4e8e\u7ea6\u5b9a\uff09\n# ============================================================================\n\nclass PythonAccessControl:\n    \"\"\"Python\u7684\u8bbf\u95ee\u63a7\u5236\u6f14\u793a\n\n    Python\u6ca1\u6709\u4e25\u683c\u7684\u8bbf\u95ee\u63a7\u5236\u673a\u5236\uff0c\u800c\u662f\u901a\u8fc7\u547d\u540d\u7ea6\u5b9a\u6765\u5b9e\u73b0\uff1a\n    - \u516c\u6709\u6210\u5458\uff1a\u6b63\u5e38\u547d\u540d\uff0c\u5982\uff1apublic_member\n    - \u4fdd\u62a4\u6210\u5458\uff1a\u5355\u4e0b\u5212\u7ebf\u5f00\u5934\uff0c\u5982\uff1a_protected_member\n    - \u79c1\u6709\u6210\u5458\uff1a\u53cc\u4e0b\u5212\u7ebf\u5f00\u5934\uff0c\u5982\uff1a__private_member\n\n    \u6ce8\u610f\uff1a\u8fd9\u53ea\u662f\u4e00\u4e9b\u7ea6\u5b9a\uff0cPython\u5e76\u4e0d\u5f3a\u5236\u963b\u6b62\u8bbf\u95ee\u3002\n    \"\"\"\n\n    def __init__(self):\n        # \u516c\u6709\u6210\u5458\n        self.public = \"\u516c\u6709\u5c5e\u6027\"\n\n        # \u4fdd\u62a4\u6210\u5458\uff08\u7ea6\u5b9a\uff09\n        self._protected = \"\u4fdd\u62a4\u5c5e\u6027\"\n\n        # \u79c1\u6709\u6210\u5458\uff08\u540d\u79f0\u4fee\u9970\uff09\n        self.__private = \"\u79c1\u6709\u5c5e\u6027\"\n\n    def public_method(self):\n        return \"\u516c\u6709\u65b9\u6cd5\"\n\n    def _protected_method(self):\n        return \"\u4fdd\u62a4\u65b9\u6cd5\"\n\n    def __private_method(self):\n        return \"\u79c1\u6709\u65b9\u6cd5\"\n\n    def internal_access(self):\n        \"\"\"\u5185\u90e8\u8bbf\u95ee\u6240\u6709\u6210\u5458\"\"\"\n        print(f\"\u5185\u90e8\u8bbf\u95ee: {self.public}\")\n        print(f\"\u5185\u90e8\u8bbf\u95ee: {self._protected}\")\n        print(f\"\u5185\u90e8\u8bbf\u95ee: {self.__private}\")\n        print(f\"\u5185\u90e8\u8bbf\u95ee: {self.__private_method()}\")\n\n# \u6d4b\u8bd5Python\u7684\u8bbf\u95ee\u63a7\u5236\nprint(\"=== Python\u8bbf\u95ee\u63a7\u5236\u6f14\u793a ===\")\nobj = PythonAccessControl()\n\nprint(\"\\n1. \u5916\u90e8\u8bbf\u95ee\u516c\u6709\u6210\u5458:\")\nprint(obj.public)  # \u53ef\u4ee5\u8bbf\u95ee\nprint(obj.public_method())  # \u53ef\u4ee5\u8bbf\u95ee\n\nprint(\"\\n2. \u5916\u90e8\u8bbf\u95ee\u4fdd\u62a4\u6210\u5458\uff08\u4e0d\u63a8\u8350\u4f46\u53ef\u4ee5\uff09:\")\nprint(obj._protected)  # \u53ef\u4ee5\u8bbf\u95ee\uff0c\u4f46\u4e0d\u63a8\u8350\nprint(obj._protected_method())  # \u53ef\u4ee5\u8bbf\u95ee\uff0c\u4f46\u4e0d\u63a8\u8350\n\nprint(\"\\n3. \u5916\u90e8\u8bbf\u95ee\u79c1\u6709\u6210\u5458\uff08\u5b9e\u9645\u4e0a\u88ab\u540d\u79f0\u4fee\u9970\uff09:\")\n# print(obj.__private)  # \u62a5\u9519\uff1aAttributeError\n# print(obj.__private_method())  # \u62a5\u9519\uff1aAttributeError\n\n# \u4f46\u5b9e\u9645\u4e0a\u53ef\u4ee5\u901a\u8fc7\u4fee\u9970\u540e\u7684\u540d\u79f0\u8bbf\u95ee\uff08\u4e0d\u63a8\u8350\uff09\nprint(\"\u5b9e\u9645\u79c1\u6709\u5c5e\u6027\u540d\u79f0:\", obj._PythonAccessControl__private)\nprint(\"\u5b9e\u9645\u79c1\u6709\u65b9\u6cd5\u540d\u79f0:\", obj._PythonAccessControl__private_method())\n\nprint(\"\\n4. \u5185\u90e8\u8bbf\u95ee\u6240\u6709\u6210\u5458:\")\nobj.internal_access()<\/code><\/pre>\n\n\n\n<pre class=\"wp-block-code\"><code>\/\/ ============================================================================\n\/\/ Java\u7684\u8bbf\u95ee\u63a7\u5236\uff08\u4e25\u683c\uff09\n\/\/ ============================================================================\n\n\/*\nJava\u6709\u4e25\u683c\u7684\u8bbf\u95ee\u63a7\u5236\u4fee\u9970\u7b26\uff1a\n- public: \u4efb\u4f55\u7c7b\u90fd\u53ef\u4ee5\u8bbf\u95ee\n- protected: \u540c\u4e00\u5305\u5185\u6216\u5b50\u7c7b\u53ef\u4ee5\u8bbf\u95ee\n- \u9ed8\u8ba4\uff08\u5305\u79c1\u6709\uff09: \u540c\u4e00\u5305\u5185\u53ef\u4ee5\u8bbf\u95ee\n- private: \u53ea\u6709\u672c\u7c7b\u53ef\u4ee5\u8bbf\u95ee\n*\/\n\nclass JavaAccessControl {\n    \/\/ \u516c\u6709\u6210\u5458\n    public String publicField = \"\u516c\u6709\u5c5e\u6027\";\n\n    \/\/ \u4fdd\u62a4\u6210\u5458\n    protected String protectedField = \"\u4fdd\u62a4\u5c5e\u6027\";\n\n    \/\/ \u9ed8\u8ba4\uff08\u5305\u79c1\u6709\uff09\u6210\u5458\n    String defaultField = \"\u9ed8\u8ba4\u5c5e\u6027\";\n\n    \/\/ \u79c1\u6709\u6210\u5458\n    private String privateField = \"\u79c1\u6709\u5c5e\u6027\";\n\n    \/\/ \u516c\u6709\u65b9\u6cd5\n    public void publicMethod() {\n        System.out.println(\"\u516c\u6709\u65b9\u6cd5\");\n    }\n\n    \/\/ \u4fdd\u62a4\u65b9\u6cd5\n    protected void protectedMethod() {\n        System.out.println(\"\u4fdd\u62a4\u65b9\u6cd5\");\n    }\n\n    \/\/ \u9ed8\u8ba4\u65b9\u6cd5\n    void defaultMethod() {\n        System.out.println(\"\u9ed8\u8ba4\u65b9\u6cd5\");\n    }\n\n    \/\/ \u79c1\u6709\u65b9\u6cd5\n    private void privateMethod() {\n        System.out.println(\"\u79c1\u6709\u65b9\u6cd5\");\n    }\n\n    \/\/ \u5185\u90e8\u8bbf\u95ee\n    public void internalAccess() {\n        System.out.println(\"\u5185\u90e8\u8bbf\u95ee\u6240\u6709\u6210\u5458:\");\n        System.out.println(publicField);\n        System.out.println(protectedField);\n        System.out.println(defaultField);\n        System.out.println(privateField);\n\n        publicMethod();\n        protectedMethod();\n        defaultMethod();\n        privateMethod();\n    }\n}\n\n\/\/ \u6d4b\u8bd5Java\u7684\u8bbf\u95ee\u63a7\u5236\npublic class Main {\n    public static void main(String&#91;] args) {\n        System.out.println(\"=== Java\u8bbf\u95ee\u63a7\u5236\u6f14\u793a ===\");\n        JavaAccessControl obj = new JavaAccessControl();\n\n        System.out.println(\"\\n1. \u5916\u90e8\u8bbf\u95ee\u516c\u6709\u6210\u5458:\");\n        System.out.println(obj.publicField);  \/\/ \u53ef\u4ee5\u8bbf\u95ee\n        obj.publicMethod();  \/\/ \u53ef\u4ee5\u8bbf\u95ee\n\n        System.out.println(\"\\n2. \u5916\u90e8\u8bbf\u95ee\u4fdd\u62a4\u6210\u5458\uff08\u540c\u5305\u6216\u5b50\u7c7b\uff09:\");\n        \/\/ System.out.println(obj.protectedField);  \/\/ \u7f16\u8bd1\u9519\u8bef\uff08\u5982\u679c\u5728\u4e0d\u540c\u5305\uff09\n        \/\/ obj.protectedMethod();  \/\/ \u7f16\u8bd1\u9519\u8bef\uff08\u5982\u679c\u5728\u4e0d\u540c\u5305\uff09\n\n        System.out.println(\"\\n3. \u5916\u90e8\u8bbf\u95ee\u9ed8\u8ba4\u6210\u5458\uff08\u540c\u5305\uff09:\");\n        \/\/ System.out.println(obj.defaultField);  \/\/ \u7f16\u8bd1\u9519\u8bef\uff08\u5982\u679c\u5728\u4e0d\u540c\u5305\uff09\n        \/\/ obj.defaultMethod();  \/\/ \u7f16\u8bd1\u9519\u8bef\uff08\u5982\u679c\u5728\u4e0d\u540c\u5305\uff09\n\n        System.out.println(\"\\n4. \u5916\u90e8\u8bbf\u95ee\u79c1\u6709\u6210\u5458:\");\n        \/\/ System.out.println(obj.privateField);  \/\/ \u7f16\u8bd1\u9519\u8bef\n        \/\/ obj.privateMethod();  \/\/ \u7f16\u8bd1\u9519\u8bef\n\n        System.out.println(\"\\n5. \u5185\u90e8\u8bbf\u95ee\u6240\u6709\u6210\u5458:\");\n        obj.internalAccess();\n    }\n}<\/code><\/pre>\n\n\n\n<pre class=\"wp-block-code\"><code>\/\/ ============================================================================\n\/\/ C++\u7684\u8bbf\u95ee\u63a7\u5236\uff08\u4e25\u683c\u4e14\u7075\u6d3b\uff09\n\/\/ ============================================================================\n\n\/*\nC++\u7684\u8bbf\u95ee\u63a7\u5236\uff1a\n- public: \u4efb\u4f55\u4ee3\u7801\u90fd\u53ef\u4ee5\u8bbf\u95ee\n- protected: \u7c7b\u5185\u90e8\u548c\u6d3e\u751f\u7c7b\u53ef\u4ee5\u8bbf\u95ee\n- private: \u53ea\u6709\u7c7b\u5185\u90e8\u53ef\u4ee5\u8bbf\u95ee\n\nC++\u8fd8\u652f\u6301\u53cb\u5143\uff08friend\uff09\u673a\u5236\uff0c\u53ef\u4ee5\u6253\u7834\u5c01\u88c5\u3002\n*\/\n\n#include &lt;iostream&gt;\n#include &lt;string&gt;\n\nclass CppAccessControl {\nprivate:    \/\/ \u79c1\u6709\u6210\u5458\n    std::string privateField = \"\u79c1\u6709\u5c5e\u6027\";\n\n    void privateMethod() {\n        std::cout &lt;&lt; \"\u79c1\u6709\u65b9\u6cd5\" &lt;&lt; std::endl;\n    }\n\nprotected:  \/\/ \u4fdd\u62a4\u6210\u5458\n    std::string protectedField = \"\u4fdd\u62a4\u5c5e\u6027\";\n\n    void protectedMethod() {\n        std::cout &lt;&lt; \"\u4fdd\u62a4\u65b9\u6cd5\" &lt;&lt; std::endl;\n    }\n\npublic:     \/\/ \u516c\u6709\u6210\u5458\n    std::string publicField = \"\u516c\u6709\u5c5e\u6027\";\n\n    void publicMethod() {\n        std::cout &lt;&lt; \"\u516c\u6709\u65b9\u6cd5\" &lt;&lt; std::endl;\n    }\n\n    \/\/ \u5185\u90e8\u8bbf\u95ee\u6240\u6709\u6210\u5458\n    void internalAccess() {\n        std::cout &lt;&lt; \"\u5185\u90e8\u8bbf\u95ee\u6240\u6709\u6210\u5458:\" &lt;&lt; std::endl;\n        std::cout &lt;&lt; publicField &lt;&lt; std::endl;\n        std::cout &lt;&lt; protectedField &lt;&lt; std::endl;\n        std::cout &lt;&lt; privateField &lt;&lt; std::endl;\n\n        publicMethod();\n        protectedMethod();\n        privateMethod();\n    }\n\n    \/\/ \u53cb\u5143\u51fd\u6570\u58f0\u660e\n    friend void friendFunction(CppAccessControl&amp; obj);\n};\n\n\/\/ \u53cb\u5143\u51fd\u6570\u5b9a\u4e49\nvoid friendFunction(CppAccessControl&amp; obj) {\n    std::cout &lt;&lt; \"\\n\u53cb\u5143\u51fd\u6570\u8bbf\u95ee:\" &lt;&lt; std::endl;\n    std::cout &lt;&lt; obj.publicField &lt;&lt; std::endl;\n    std::cout &lt;&lt; obj.protectedField &lt;&lt; std::endl;  \/\/ \u53ef\u4ee5\u8bbf\u95ee\u4fdd\u62a4\u6210\u5458\n    std::cout &lt;&lt; obj.privateField &lt;&lt; std::endl;    \/\/ \u53ef\u4ee5\u8bbf\u95ee\u79c1\u6709\u6210\u5458\n}\n\n\/\/ \u6d4b\u8bd5C++\u7684\u8bbf\u95ee\u63a7\u5236\nint main() {\n    std::cout &lt;&lt; \"=== C++\u8bbf\u95ee\u63a7\u5236\u6f14\u793a ===\" &lt;&lt; std::endl;\n    CppAccessControl obj;\n\n    std::cout &lt;&lt; \"\\n1. \u5916\u90e8\u8bbf\u95ee\u516c\u6709\u6210\u5458:\" &lt;&lt; std::endl;\n    std::cout &lt;&lt; obj.publicField &lt;&lt; std::endl;  \/\/ \u53ef\u4ee5\u8bbf\u95ee\n    obj.publicMethod();  \/\/ \u53ef\u4ee5\u8bbf\u95ee\n\n    std::cout &lt;&lt; \"\\n2. \u5916\u90e8\u8bbf\u95ee\u4fdd\u62a4\u6210\u5458:\" &lt;&lt; std::endl;\n    \/\/ std::cout &lt;&lt; obj.protectedField &lt;&lt; std::endl;  \/\/ \u7f16\u8bd1\u9519\u8bef\n    \/\/ obj.protectedMethod();  \/\/ \u7f16\u8bd1\u9519\u8bef\n\n    std::cout &lt;&lt; \"\\n3. \u5916\u90e8\u8bbf\u95ee\u79c1\u6709\u6210\u5458:\" &lt;&lt; std::endl;\n    \/\/ std::cout &lt;&lt; obj.privateField &lt;&lt; std::endl;  \/\/ \u7f16\u8bd1\u9519\u8bef\n    \/\/ obj.privateMethod();  \/\/ \u7f16\u8bd1\u9519\u8bef\n\n    std::cout &lt;&lt; \"\\n4. \u5185\u90e8\u8bbf\u95ee\u6240\u6709\u6210\u5458:\" &lt;&lt; std::endl;\n    obj.internalAccess();\n\n    std::cout &lt;&lt; \"\\n5. \u53cb\u5143\u51fd\u6570\u8bbf\u95ee:\" &lt;&lt; std::endl;\n    friendFunction(obj);\n\n    return 0;\n}<\/code><\/pre>\n\n\n\n<h3 class=\"wp-block-heading\">1.3 \u8bbf\u95ee\u63a7\u5236\u5bf9\u6bd4\u603b\u7ed3<\/h3>\n\n\n\n<figure class=\"wp-block-table\"><table class=\"has-fixed-layout\"><thead><tr><th>\u8bed\u8a00<\/th><th>\u516c\u6709(public)<\/th><th>\u4fdd\u62a4(protected)<\/th><th>\u79c1\u6709(private)<\/th><th>\u7279\u70b9<\/th><\/tr><\/thead><tbody><tr><td>Python<\/td><td>\u76f4\u63a5\u8bbf\u95ee<\/td><td>\u5355\u4e0b\u5212\u7ebf\u5f00\u5934\uff08\u7ea6\u5b9a\uff09<\/td><td>\u53cc\u4e0b\u5212\u7ebf\u5f00\u5934\uff08\u540d\u79f0\u4fee\u9970\uff09<\/td><td>\u57fa\u4e8e\u7ea6\u5b9a\uff0c\u4e0d\u4e25\u683c\u5f3a\u5236<\/td><\/tr><tr><td>Java<\/td><td>\u4efb\u4f55\u7c7b\u53ef\u8bbf\u95ee<\/td><td>\u540c\u5305\u6216\u5b50\u7c7b\u53ef\u8bbf\u95ee<\/td><td>\u4ec5\u672c\u7c7b\u53ef\u8bbf\u95ee<\/td><td>\u4e25\u683c\uff0c\u7f16\u8bd1\u65f6\u68c0\u67e5<\/td><\/tr><tr><td>C++<\/td><td>\u4efb\u4f55\u4ee3\u7801\u53ef\u8bbf\u95ee<\/td><td>\u7c7b\u5185\u548c\u6d3e\u751f\u7c7b\u53ef\u8bbf\u95ee<\/td><td>\u4ec5\u7c7b\u5185\u53ef\u8bbf\u95ee<\/td><td>\u4e25\u683c\uff0c\u652f\u6301\u53cb\u5143\u6253\u7834\u5c01\u88c5<\/td><\/tr><tr><td>C#<\/td><td>\u4efb\u4f55\u4ee3\u7801\u53ef\u8bbf\u95ee<\/td><td>\u7c7b\u5185\u548c\u6d3e\u751f\u7c7b\u53ef\u8bbf\u95ee<\/td><td>\u4ec5\u7c7b\u5185\u53ef\u8bbf\u95ee<\/td><td>\u4e25\u683c\uff0c\u652f\u6301\u5185\u90e8\u8bbf\u95ee\u7ea7\u522b<\/td><\/tr><tr><td>JavaScript<\/td><td>\u6240\u6709\u6210\u5458\u90fd\u516c\u6709<\/td><td>\u65e0\u539f\u751f\u652f\u6301\uff08ES6+\u6709#\u79c1\u6709\u5b57\u6bb5\uff09<\/td><td>\u65e0\u539f\u751f\u652f\u6301\uff08ES6+\u6709#\u79c1\u6709\u5b57\u6bb5\uff09<\/td><td>\u4f20\u7edf\u4e0a\u65e0\u8bbf\u95ee\u63a7\u5236<\/td><\/tr><\/tbody><\/table><\/figure>\n\n\n\n<p><strong>\u6838\u5fc3\u601d\u60f3\uff1a<\/strong><br>\u5c3d\u7ba1\u4e0d\u540c\u8bed\u8a00\u7684\u5b9e\u73b0\u65b9\u5f0f\u4e0d\u540c\uff0c\u4f46\u8bbf\u95ee\u63a7\u5236\u7684\u6838\u5fc3\u601d\u60f3\u662f\u4e00\u81f4\u7684\uff1a\u901a\u8fc7\u9650\u5236\u5bf9\u7c7b\u5185\u90e8\u7ec6\u8282\u7684\u8bbf\u95ee\uff0c\u6765\u964d\u4f4e\u8026\u5408\u5ea6\uff0c\u63d0\u9ad8\u4ee3\u7801\u7684\u53ef\u7ef4\u62a4\u6027\u3002<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">\u7b2c\u4e8c\u90e8\u5206\uff1a\u5c01\u88c5\u7684\u827a\u672f<\/h2>\n\n\n\n<h3 class=\"wp-block-heading\">2.1 \u4e3a\u4ec0\u4e48\u9700\u8981\u5c01\u88c5\uff1f<\/h3>\n\n\n\n<p>\u5c01\u88c5\u662f\u9762\u5411\u5bf9\u8c61\u7f16\u7a0b\u7684\u4e09\u5927\u652f\u67f1\u4e4b\u4e00\uff08\u5c01\u88c5\u3001\u7ee7\u627f\u3001\u591a\u6001\uff09\u3002\u5b83\u7684\u91cd\u8981\u6027\u4f53\u73b0\u5728\u4ee5\u4e0b\u51e0\u4e2a\u65b9\u9762\uff1a<\/p>\n\n\n\n<p><strong>1. \u9690\u85cf\u5b9e\u73b0\u7ec6\u8282<\/strong><\/p>\n\n\n\n<pre class=\"wp-block-code\"><code># \u6ca1\u6709\u5c01\u88c5\u7684\u60c5\u51b5\nclass BankAccountBad:\n    def __init__(self):\n        self.balance = 0  # \u4f59\u989d\u76f4\u63a5\u66b4\u9732\n\naccount = BankAccountBad()\naccount.balance = -1000  # \u53ef\u4ee5\u76f4\u63a5\u8bbe\u4e3a\u8d1f\u503c\uff0c\u4e0d\u5408\u903b\u8f91\n\n# \u6709\u5c01\u88c5\u7684\u60c5\u51b5\nclass BankAccountGood:\n    def __init__(self):\n        self.__balance = 0  # \u79c1\u6709\u5c5e\u6027\n\n    def deposit(self, amount):\n        if amount &gt; 0:\n            self.__balance += amount\n\n    def withdraw(self, amount):\n        if 0 &lt; amount &lt;= self.__balance:\n            self.__balance -= amount\n            return amount\n        return 0\n\n    def get_balance(self):\n        return self.__balance\n\naccount = BankAccountGood()\n# account.__balance = -1000  # \u65e0\u6cd5\u76f4\u63a5\u4fee\u6539\naccount.deposit(1000)  # \u901a\u8fc7\u53d7\u63a7\u7684\u65b9\u6cd5\u64cd\u4f5c<\/code><\/pre>\n\n\n\n<p><strong>2. \u63d0\u9ad8\u53ef\u7ef4\u62a4\u6027<\/strong><br>\u5f53\u5185\u90e8\u5b9e\u73b0\u9700\u8981\u4fee\u6539\u65f6\uff0c\u53ea\u8981\u63a5\u53e3\u4e0d\u53d8\uff0c\u5c31\u4e0d\u4f1a\u5f71\u54cd\u4f7f\u7528\u8be5\u7c7b\u7684\u4ee3\u7801\u3002<\/p>\n\n\n\n<p><strong>3. \u589e\u5f3a\u5b89\u5168\u6027<\/strong><br>\u9632\u6b62\u5916\u90e8\u4ee3\u7801\u968f\u610f\u4fee\u6539\u5bf9\u8c61\u72b6\u6001\uff0c\u786e\u4fdd\u5bf9\u8c61\u59cb\u7ec8\u5904\u4e8e\u6709\u6548\u72b6\u6001\u3002<\/p>\n\n\n\n<p><strong>4. \u7b80\u5316\u63a5\u53e3<\/strong><br>\u5bf9\u5916\u63d0\u4f9b\u7b80\u6d01\u660e\u4e86\u7684\u63a5\u53e3\uff0c\u9690\u85cf\u590d\u6742\u7684\u5185\u90e8\u903b\u8f91\u3002<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">2.2 \u5982\u4f55\u6b63\u786e\u5c01\u88c5\uff1f<\/h3>\n\n\n\n<p>\u6b63\u786e\u7684\u5c01\u88c5\u4e0d\u4ec5\u4ec5\u662f\u628a\u5c5e\u6027\u8bbe\u4e3a\u79c1\u6709\uff0c\u66f4\u91cd\u8981\u7684\u662f\u8bbe\u8ba1\u826f\u597d\u7684\u516c\u5171\u63a5\u53e3\u3002\u4ee5\u4e0b\u662f\u4e00\u4e9b\u6700\u4f73\u5b9e\u8df5\uff1a<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code># ============================================================================\n# \u6b63\u786e\u5c01\u88c5\u7684\u793a\u4f8b\n# ============================================================================\n\nclass Temperature:\n    \"\"\"\u6e29\u5ea6\u7c7b\uff1a\u5c55\u793a\u6b63\u786e\u5c01\u88c5\"\"\"\n\n    def __init__(self, celsius: float):\n        self.__celsius = celsius  # \u5185\u90e8\u4f7f\u7528\u6444\u6c0f\u5ea6\u5b58\u50a8\n\n    # \u63d0\u4f9b\u6e05\u6670\u7684\u63a5\u53e3\n    @property\n    def celsius(self) -&gt; float:\n        \"\"\"\u83b7\u53d6\u6444\u6c0f\u5ea6\uff08\u53ea\u8bfb\uff09\"\"\"\n        return self.__celsius\n\n    @property\n    def fahrenheit(self) -&gt; float:\n        \"\"\"\u83b7\u53d6\u534e\u6c0f\u5ea6\uff08\u8ba1\u7b97\u5c5e\u6027\uff09\"\"\"\n        return self.__celsius * 9\/5 + 32\n\n    @property\n    def kelvin(self) -&gt; float:\n        \"\"\"\u83b7\u53d6\u5f00\u5c14\u6587\u6e29\u5ea6\uff08\u8ba1\u7b97\u5c5e\u6027\uff09\"\"\"\n        return self.__celsius + 273.15\n\n    def adjust(self, delta: float):\n        \"\"\"\u8c03\u6574\u6e29\u5ea6\uff08\u5e26\u9a8c\u8bc1\uff09\"\"\"\n        if -273.15 &lt;= self.__celsius + delta &lt;= 1000:  # \u5408\u7406\u6e29\u5ea6\u8303\u56f4\n            self.__celsius += delta\n        else:\n            raise ValueError(\"\u6e29\u5ea6\u8d85\u51fa\u5408\u7406\u8303\u56f4\")\n\nclass Employee:\n    \"\"\"\u5458\u5de5\u7c7b\uff1a\u5c55\u793a\u4e1a\u52a1\u903b\u8f91\u5c01\u88c5\"\"\"\n\n    def __init__(self, name: str, salary: float):\n        self.__name = name\n        self.__salary = salary\n        self.__bonus = 0\n\n    @property\n    def name(self) -&gt; str:\n        return self.__name\n\n    @property\n    def total_compensation(self) -&gt; float:\n        \"\"\"\u603b\u85aa\u916c\uff08\u8ba1\u7b97\u5c5e\u6027\uff09\"\"\"\n        return self.__salary + self.__bonus\n\n    def set_bonus(self, performance_score: float):\n        \"\"\"\u6839\u636e\u7ee9\u6548\u8bbe\u7f6e\u5956\u91d1\uff08\u4e1a\u52a1\u903b\u8f91\u5c01\u88c5\uff09\"\"\"\n        if performance_score &lt; 0 or performance_score &gt; 1:\n            raise ValueError(\"\u7ee9\u6548\u5206\u6570\u5fc5\u987b\u57280-1\u4e4b\u95f4\")\n\n        # \u590d\u6742\u7684\u5956\u91d1\u8ba1\u7b97\u903b\u8f91\u88ab\u5c01\u88c5\n        if performance_score &gt;= 0.9:\n            self.__bonus = self.__salary * 0.3\n        elif performance_score &gt;= 0.7:\n            self.__bonus = self.__salary * 0.2\n        elif performance_score &gt;= 0.5:\n            self.__bonus = self.__salary * 0.1\n        else:\n            self.__bonus = 0\n\n        # \u8bb0\u5f55\u65e5\u5fd7\uff08\u5185\u90e8\u7ec6\u8282\uff09\n        self.__log_bonus_adjustment(performance_score)\n\n    def __log_bonus_adjustment(self, score: float):\n        \"\"\"\u8bb0\u5f55\u5956\u91d1\u8c03\u6574\u65e5\u5fd7\uff08\u79c1\u6709\u65b9\u6cd5\uff09\"\"\"\n        import datetime\n        timestamp = datetime.datetime.now()\n        print(f\"&#91;{timestamp}] \u5458\u5de5 {self.__name} \u7ee9\u6548 {score:.2f} \u5956\u91d1 {self.__bonus:.2f}\")\n\n# \u4f7f\u7528\u5c01\u88c5\u826f\u597d\u7684\u7c7b\nprint(\"=== \u6b63\u786e\u5c01\u88c5\u793a\u4f8b ===\")\n\ntemp = Temperature(25)\nprint(f\"\u6444\u6c0f\u5ea6: {temp.celsius}\u00b0C\")\nprint(f\"\u534e\u6c0f\u5ea6: {temp.fahrenheit}\u00b0F\")\nprint(f\"\u5f00\u5c14\u6587: {temp.kelvin}K\")\n\ntemp.adjust(10)\nprint(f\"\u8c03\u6574\u540e\u6444\u6c0f\u5ea6: {temp.celsius}\u00b0C\")\n\nprint(\"\\n\u5458\u5de5\u793a\u4f8b:\")\nemp = Employee(\"\u5f20\u4e09\", 10000)\nemp.set_bonus(0.85)\nprint(f\"\u5458\u5de5 {emp.name} \u603b\u85aa\u916c: {emp.total_compensation:.2f}\")<\/code><\/pre>\n\n\n\n<h3 class=\"wp-block-heading\">2.3 \u5c01\u88c5\u7684\u5c42\u6b21\u6027<\/h3>\n\n\n\n<p>\u5c01\u88c5\u4e0d\u4ec5\u9002\u7528\u4e8e\u5355\u4e2a\u7c7b\uff0c\u4e5f\u9002\u7528\u4e8e\u6a21\u5757\u3001\u5305\u548c\u6574\u4e2a\u7cfb\u7edf\u3002\u597d\u7684\u8f6f\u4ef6\u8bbe\u8ba1\u5e94\u8be5\u5728\u591a\u4e2a\u5c42\u6b21\u4e0a\u5b9e\u65bd\u5c01\u88c5\u3002<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code># ============================================================================\n# \u6a21\u5757\u7ea7\u522b\u7684\u5c01\u88c5\n# ============================================================================\n\n# \u6587\u4ef6: bank_account.py\n\"\"\"\n\u94f6\u884c\u8d26\u6237\u6a21\u5757\n\u901a\u8fc7__all__\u63a7\u5236\u5bfc\u51fa\u7684\u5185\u5bb9\uff0c\u5b9e\u73b0\u6a21\u5757\u7ea7\u5c01\u88c5\n\"\"\"\n\n__all__ = &#91;'BankAccount', 'SavingsAccount', 'CheckingAccount']  # \u53ea\u5bfc\u51fa\u8fd9\u4e9b\u7c7b\n\nclass _DatabaseConnector:\n    \"\"\"\u6570\u636e\u5e93\u8fde\u63a5\u5668\uff08\u6a21\u5757\u5185\u90e8\u4f7f\u7528\uff0c\u4e0d\u5bfc\u51fa\uff09\"\"\"\n    pass\n\nclass _Logger:\n    \"\"\"\u65e5\u5fd7\u8bb0\u5f55\u5668\uff08\u6a21\u5757\u5185\u90e8\u4f7f\u7528\uff0c\u4e0d\u5bfc\u51fa\uff09\"\"\"\n    pass\n\nclass BankAccount:\n    \"\"\"\u94f6\u884c\u8d26\u6237\u57fa\u7c7b\"\"\"\n    pass\n\nclass SavingsAccount(BankAccount):\n    \"\"\"\u50a8\u84c4\u8d26\u6237\"\"\"\n    pass\n\nclass CheckingAccount(BankAccount):\n    \"\"\"\u652f\u7968\u8d26\u6237\"\"\"\n    pass\n\n# \u4f7f\u7528\u6a21\u5757\n# from bank_account import *  # \u53ea\u80fd\u5bfc\u5165__all__\u4e2d\u6307\u5b9a\u7684\u7c7b\n# _DatabaseConnector  # \u65e0\u6cd5\u5bfc\u5165\uff0c\u56e0\u4e3a\u4e0d\u5728__all__\u4e2d<\/code><\/pre>\n\n\n\n<h3 class=\"wp-block-heading\">2.4 \u5c01\u88c5\u7684\u8bbe\u8ba1\u539f\u5219<\/h3>\n\n\n\n<p><strong>1. \u6700\u5c0f\u5316\u516c\u5171\u63a5\u53e3<\/strong><br>\u53ea\u66b4\u9732\u5fc5\u8981\u7684\u63a5\u53e3\uff0c\u5176\u4ed6\u90fd\u8bbe\u4e3a\u79c1\u6709\u3002<\/p>\n\n\n\n<p><strong>2. \u4fdd\u6301\u4e00\u81f4\u6027<\/strong><br>\u76f8\u4f3c\u7684\u7c7b\u5e94\u8be5\u6709\u76f8\u4f3c\u7684\u63a5\u53e3\u8bbe\u8ba1\u3002<\/p>\n\n\n\n<p><strong>3. \u907f\u514d\u66b4\u9732\u5b9e\u73b0\u7ec6\u8282<\/strong><br>\u4e0d\u8981\u8ba9\u7528\u6237\u4f9d\u8d56\u7c7b\u7684\u5185\u90e8\u5b9e\u73b0\u3002<\/p>\n\n\n\n<p><strong>4. \u63d0\u4f9b\u5b8c\u6574\u7684\u62bd\u8c61<\/strong><br>\u63a5\u53e3\u5e94\u8be5\u5b8c\u6574\u5730\u8868\u8fbe\u7c7b\u7684\u529f\u80fd\u3002<\/p>\n\n\n\n<p><strong>5. \u8003\u8651\u53ef\u6269\u5c55\u6027<\/strong><br>\u4e3a\u672a\u6765\u7684\u6269\u5c55\u7559\u6709\u4f59\u5730\u3002<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">\u7b2c\u4e09\u90e8\u5206\uff1a\u8bbf\u95ee\u63a7\u5236\u7684\u8fdb\u9636\u5e94\u7528<\/h2>\n\n\n\n<h3 class=\"wp-block-heading\">3.1 \u5c5e\u6027\u8bbf\u95ee\u5668\u4e0e\u4fee\u6539\u5668<\/h3>\n\n\n\n<p>\u5728\u9762\u5411\u5bf9\u8c61\u8bbe\u8ba1\u4e2d\uff0c\u6211\u4eec\u901a\u5e38\u4f7f\u7528\u5c5e\u6027\u8bbf\u95ee\u5668\uff08getter\uff09\u548c\u4fee\u6539\u5668\uff08setter\uff09\u6765\u63a7\u5236\u5bf9\u5c5e\u6027\u7684\u8bbf\u95ee\u3002Python\u63d0\u4f9b\u4e86<code>@property<\/code>\u88c5\u9970\u5668\u6765\u4f18\u96c5\u5730\u5b9e\u73b0\u8fd9\u4e00\u6a21\u5f0f\u3002<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code># ============================================================================\n# \u5c5e\u6027\u8bbf\u95ee\u5668\u4e0e\u4fee\u6539\u5668\n# ============================================================================\n\nclass Person:\n    \"\"\"\u4f7f\u7528@property\u5b9e\u73b0\u5c5e\u6027\u8bbf\u95ee\u63a7\u5236\"\"\"\n\n    def __init__(self, name: str, age: int):\n        self.__name = name\n        self.__age = age\n        self.__email = None\n\n    # \u53ea\u8bfb\u5c5e\u6027\n    @property\n    def name(self) -&gt; str:\n        return self.__name\n\n    # \u53ef\u8bfb\u53ef\u5199\u5c5e\u6027\uff08\u5e26\u9a8c\u8bc1\uff09\n    @property\n    def age(self) -&gt; int:\n        return self.__age\n\n    @age.setter\n    def age(self, value: int):\n        if not isinstance(value, int):\n            raise TypeError(\"\u5e74\u9f84\u5fc5\u987b\u662f\u6574\u6570\")\n        if value &lt; 0 or value &gt; 150:\n            raise ValueError(\"\u5e74\u9f84\u5fc5\u987b\u57280-150\u4e4b\u95f4\")\n        self.__age = value\n\n    # \u8ba1\u7b97\u5c5e\u6027\n    @property\n    def birth_year(self) -&gt; int:\n        import datetime\n        return datetime.datetime.now().year - self.__age\n\n    # \u5ef6\u8fdf\u521d\u59cb\u5316\u5c5e\u6027\n    @property\n    def email(self) -&gt; str:\n        if self.__email is None:\n            # \u5ef6\u8fdf\u751f\u6210\u90ae\u7bb1\n            self.__email = f\"{self.__name.lower().replace(' ', '.')}@company.com\"\n        return self.__email\n\n    @email.setter\n    def email(self, value: str):\n        if '@' not in value:\n            raise ValueError(\"\u65e0\u6548\u7684\u90ae\u7bb1\u5730\u5740\")\n        self.__email = value\n\n    @email.deleter\n    def email(self):\n        print(\"\u5220\u9664\u90ae\u7bb1\u5730\u5740\")\n        self.__email = None\n\nprint(\"=== \u5c5e\u6027\u8bbf\u95ee\u5668\u793a\u4f8b ===\")\n\nperson = Person(\"\u5f20\u4e09\", 25)\n\n# \u8bbf\u95ee\u5c5e\u6027\nprint(f\"\u59d3\u540d: {person.name}\")  # \u4f7f\u7528@property\u8bbf\u95ee\n# person.name = \"\u674e\u56db\"  # \u9519\u8bef\uff1a\u6ca1\u6709setter\n\n# \u8bbe\u7f6e\u5e74\u9f84\uff08\u901a\u8fc7setter\u9a8c\u8bc1\uff09\nperson.age = 30  # \u6709\u6548\nprint(f\"\u5e74\u9f84: {person.age}\")\n\ntry:\n    person.age = -5  # \u65e0\u6548\uff0c\u89e6\u53d1\u9a8c\u8bc1\nexcept ValueError as e:\n    print(f\"\u9519\u8bef: {e}\")\n\n# \u8ba1\u7b97\u5c5e\u6027\nprint(f\"\u51fa\u751f\u5e74\u4efd: {person.birth_year}\")\n\n# \u5ef6\u8fdf\u521d\u59cb\u5316\u5c5e\u6027\nprint(f\"\u90ae\u7bb1: {person.email}\")  # \u7b2c\u4e00\u6b21\u8bbf\u95ee\u65f6\u751f\u6210\n\n# \u5220\u9664\u5c5e\u6027\ndel person.email\nprint(f\"\u5220\u9664\u540e\u90ae\u7bb1: {person.email}\")  # \u91cd\u65b0\u751f\u6210<\/code><\/pre>\n\n\n\n<h3 class=\"wp-block-heading\">3.2 \u4fdd\u62a4\u6210\u5458\u7684\u5408\u7406\u4f7f\u7528<\/h3>\n\n\n\n<p>\u4fdd\u62a4\u6210\u5458\uff08protected\uff09\u5728\u7ee7\u627f\u5173\u7cfb\u4e2d\u626e\u6f14\u91cd\u8981\u89d2\u8272\u3002\u5b83\u4eec\u5141\u8bb8\u6d3e\u751f\u7c7b\u8bbf\u95ee\u57fa\u7c7b\u7684\u67d0\u4e9b\u5b9e\u73b0\u7ec6\u8282\uff0c\u540c\u65f6\u5bf9\u5916\u90e8\u4ee3\u7801\u9690\u85cf\u3002<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code># ============================================================================\n# \u4fdd\u62a4\u6210\u5458\u7684\u5408\u7406\u4f7f\u7528\n# ============================================================================\n\nclass Vehicle:\n    \"\"\"\u4ea4\u901a\u5de5\u5177\u57fa\u7c7b\"\"\"\n\n    def __init__(self, make: str, model: str):\n        self.make = make          # \u516c\u6709\uff1a\u5236\u9020\u5546\uff08\u901a\u5e38\u4e0d\u53d8\uff09\n        self.model = model        # \u516c\u6709\uff1a\u578b\u53f7\uff08\u901a\u5e38\u4e0d\u53d8\uff09\n        self._mileage = 0         # \u4fdd\u62a4\uff1a\u91cc\u7a0b\uff08\u6d3e\u751f\u7c7b\u53ef\u80fd\u9700\u8981\u8bbf\u95ee\uff09\n        self.__vin = self._generate_vin()  # \u79c1\u6709\uff1a\u8f66\u8f86\u8bc6\u522b\u7801\n\n    def _generate_vin(self) -&gt; str:\n        \"\"\"\u751f\u6210\u8f66\u8f86\u8bc6\u522b\u7801\uff08\u4fdd\u62a4\u65b9\u6cd5\uff0c\u6d3e\u751f\u7c7b\u53ef\u4ee5\u8986\u76d6\uff09\"\"\"\n        import uuid\n        return str(uuid.uuid4())&#91;:17].upper()\n\n    def drive(self, distance: float):\n        \"\"\"\u9a7e\u9a76\u8f66\u8f86\uff08\u516c\u6709\u65b9\u6cd5\uff09\"\"\"\n        if distance &gt; 0:\n            self._update_mileage(distance)\n            self._log_drive(distance)\n\n    def _update_mileage(self, distance: float):\n        \"\"\"\u66f4\u65b0\u91cc\u7a0b\uff08\u4fdd\u62a4\u65b9\u6cd5\uff0c\u5185\u90e8\u4f7f\u7528\uff09\"\"\"\n        self._mileage += distance\n\n    def _log_drive(self, distance: float):\n        \"\"\"\u8bb0\u5f55\u9a7e\u9a76\u65e5\u5fd7\uff08\u4fdd\u62a4\u65b9\u6cd5\uff0c\u5185\u90e8\u4f7f\u7528\uff09\"\"\"\n        print(f\"{self.make} {self.model} \u884c\u9a76\u4e86 {distance} \u516c\u91cc\")\n\n    def get_mileage(self) -&gt; float:\n        \"\"\"\u83b7\u53d6\u91cc\u7a0b\uff08\u516c\u6709\u63a5\u53e3\uff09\"\"\"\n        return self._mileage\n\n    @property\n    def vin(self) -&gt; str:\n        \"\"\"\u83b7\u53d6VIN\uff08\u53ea\u8bfb\u5c5e\u6027\uff09\"\"\"\n        return self.__vin\n\nclass ElectricCar(Vehicle):\n    \"\"\"\u7535\u52a8\u6c7d\u8f66\uff08\u6d3e\u751f\u7c7b\uff09\"\"\"\n\n    def __init__(self, make: str, model: str, battery_capacity: float):\n        super().__init__(make, model)\n        self.battery_capacity = battery_capacity  # \u7535\u6c60\u5bb9\u91cf\uff08kWh\uff09\n        self._remaining_charge = battery_capacity  # \u5269\u4f59\u7535\u91cf\uff08\u4fdd\u62a4\uff09\n\n    def drive(self, distance: float):\n        \"\"\"\u8986\u76d6\u9a7e\u9a76\u65b9\u6cd5\uff0c\u8003\u8651\u7535\u91cf\u6d88\u8017\"\"\"\n        energy_needed = distance * 0.2  # \u5047\u8bbe\u6bcf\u516c\u91cc\u6d88\u80170.2kWh\n\n        if energy_needed &lt;= self._remaining_charge:\n            super().drive(distance)  # \u8c03\u7528\u57fa\u7c7b\u65b9\u6cd5\n            self._remaining_charge -= energy_needed\n            print(f\"\u5269\u4f59\u7535\u91cf: {self._remaining_charge:.1f} kWh\")\n        else:\n            print(\"\u7535\u91cf\u4e0d\u8db3\uff01\")\n\n    def charge(self, amount: float):\n        \"\"\"\u5145\u7535\uff08\u7535\u52a8\u6c7d\u8f66\u7279\u6709\u65b9\u6cd5\uff09\"\"\"\n        if amount &gt; 0:\n            self._remaining_charge = min(\n                self._remaining_charge + amount,\n                self.battery_capacity\n            )\n            print(f\"\u5df2\u5145\u7535 {amount} kWh\uff0c\u5f53\u524d\u7535\u91cf: {self._remaining_charge:.1f} kWh\")\n\n    def _log_drive(self, distance: float):\n        \"\"\"\u8986\u76d6\u65e5\u5fd7\u65b9\u6cd5\uff0c\u6dfb\u52a0\u7535\u91cf\u4fe1\u606f\"\"\"\n        super()._log_drive(distance)\n        print(f\"     \u672c\u6b21\u6d88\u8017\u7535\u91cf: {distance * 0.2:.1f} kWh\")\n\nprint(\"=== \u4fdd\u62a4\u6210\u5458\u4f7f\u7528\u793a\u4f8b ===\")\n\n# \u521b\u5efa\u7535\u52a8\u6c7d\u8f66\ntesla = ElectricCar(\"Tesla\", \"Model 3\", 75)\n\nprint(f\"\u8f66\u8f86: {tesla.make} {tesla.model}\")\nprint(f\"VIN: {tesla.vin}\")  # \u901a\u8fc7\u516c\u6709\u5c5e\u6027\u8bbf\u95ee\n\n# \u9a7e\u9a76\ntesla.drive(100)  # \u884c\u9a76100\u516c\u91cc\ntesla.drive(50)   # \u884c\u9a7650\u516c\u91cc\n\nprint(f\"\u603b\u91cc\u7a0b: {tesla.get_mileage()} \u516c\u91cc\")\n\n# \u5145\u7535\ntesla.charge(30)\n\n# \u5c1d\u8bd5\u8bbf\u95ee\u4fdd\u62a4\u6210\u5458\uff08\u53ef\u4ee5\u4f46\u4e0d\u63a8\u8350\uff09\nprint(f\"\u76f4\u63a5\u8bbf\u95ee\u4fdd\u62a4\u5c5e\u6027_mileage: {tesla._mileage}\")  # \u53ef\u4ee5\u8bbf\u95ee\n\n# \u5c1d\u8bd5\u8bbf\u95ee\u79c1\u6709\u6210\u5458\uff08\u65e0\u6cd5\u76f4\u63a5\u8bbf\u95ee\uff09\n# print(tesla.__vin)  # \u9519\u8bef<\/code><\/pre>\n\n\n\n<h3 class=\"wp-block-heading\">3.3 \u79c1\u6709\u6210\u5458\u7684\u9ad8\u7ea7\u5e94\u7528<\/h3>\n\n\n\n<p>\u79c1\u6709\u6210\u5458\u4e0d\u4ec5\u7528\u4e8e\u9690\u85cf\u6570\u636e\uff0c\u8fd8\u53ef\u4ee5\u7528\u4e8e\u5b9e\u73b0\u5185\u90e8\u8f85\u52a9\u65b9\u6cd5\u3001\u7f13\u5b58\u673a\u5236\u7b49\u9ad8\u7ea7\u529f\u80fd\u3002<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code># ============================================================================\n# \u79c1\u6709\u6210\u5458\u7684\u9ad8\u7ea7\u5e94\u7528\n# ============================================================================\n\nclass DataProcessor:\n    \"\"\"\u6570\u636e\u5904\u7406\u7c7b\uff1a\u5c55\u793a\u79c1\u6709\u6210\u5458\u7684\u9ad8\u7ea7\u5e94\u7528\"\"\"\n\n    def __init__(self):\n        self.__cache = {}  # \u79c1\u6709\u7f13\u5b58\n        self.__call_count = 0  # \u79c1\u6709\u8c03\u7528\u8ba1\u6570\u5668\n        self.__last_result = None  # \u79c1\u6709\u4e0a\u6b21\u7ed3\u679c\n\n    def process(self, data: str) -&gt; dict:\n        \"\"\"\u5904\u7406\u6570\u636e\uff08\u516c\u6709\u63a5\u53e3\uff09\"\"\"\n        self.__call_count += 1\n\n        # \u68c0\u67e5\u7f13\u5b58\n        cache_key = hash(data)\n        if cache_key in self.__cache:\n            print(\"\u4ece\u7f13\u5b58\u83b7\u53d6\u7ed3\u679c\")\n            return self.__cache&#91;cache_key]\n\n        # \u5904\u7406\u6570\u636e\uff08\u6a21\u62df\u8017\u65f6\u64cd\u4f5c\uff09\n        result = self.__heavy_computation(data)\n\n        # \u7f13\u5b58\u7ed3\u679c\n        self.__cache&#91;cache_key] = result\n        self.__last_result = result\n\n        return result\n\n    def __heavy_computation(self, data: str) -&gt; dict:\n        \"\"\"\u91cd\u578b\u8ba1\u7b97\uff08\u79c1\u6709\u65b9\u6cd5\uff09\"\"\"\n        print(\"\u6267\u884c\u91cd\u578b\u8ba1\u7b97...\")\n        # \u6a21\u62df\u590d\u6742\u8ba1\u7b97\n        import time\n        time.sleep(0.1)  # \u6a21\u62df\u8017\u65f6\n\n        # \u8fd4\u56de\u5904\u7406\u7ed3\u679c\n        return {\n            \"length\": len(data),\n            \"words\": len(data.split()),\n            \"uppercase\": sum(1 for c in data if c.isupper()),\n            \"processed_at\": time.time()\n        }\n\n    def clear_cache(self):\n        \"\"\"\u6e05\u7a7a\u7f13\u5b58\uff08\u516c\u6709\u65b9\u6cd5\uff09\"\"\"\n        self.__cache.clear()\n        print(\"\u7f13\u5b58\u5df2\u6e05\u7a7a\")\n\n    def get_stats(self) -&gt; dict:\n        \"\"\"\u83b7\u53d6\u7edf\u8ba1\u4fe1\u606f\uff08\u516c\u6709\u65b9\u6cd5\uff09\"\"\"\n        return {\n            \"call_count\": self.__call_count,\n            \"cache_size\": len(self.__cache),\n            \"last_result\": self.__last_result\n        }\n\n    def __repr__(self):\n        \"\"\"\u5bf9\u8c61\u8868\u793a\uff08\u5185\u90e8\u4f7f\u7528\uff09\"\"\"\n        return f\"DataProcessor(\u8c03\u7528\u6b21\u6570={self.__call_count}, \u7f13\u5b58\u5927\u5c0f={len(self.__cache)})\"\n\nprint(\"=== \u79c1\u6709\u6210\u5458\u9ad8\u7ea7\u5e94\u7528 ===\")\n\nprocessor = DataProcessor()\n\n# \u5904\u7406\u6570\u636e\nresult1 = processor.process(\"Hello World!\")\nprint(f\"\u7ed3\u679c1: {result1}\")\n\n# \u518d\u6b21\u5904\u7406\u76f8\u540c\u6570\u636e\uff08\u5e94\u8be5\u4ece\u7f13\u5b58\u83b7\u53d6\uff09\nresult2 = processor.process(\"Hello World!\")\nprint(f\"\u7ed3\u679c2: {result2}\")\n\n# \u5904\u7406\u65b0\u6570\u636e\nresult3 = processor.process(\"Python Programming\")\nprint(f\"\u7ed3\u679c3: {result3}\")\n\n# \u83b7\u53d6\u7edf\u8ba1\u4fe1\u606f\nstats = processor.get_stats()\nprint(f\"\u7edf\u8ba1\u4fe1\u606f: {stats}\")\n\n# \u6e05\u7a7a\u7f13\u5b58\nprocessor.clear_cache()\n\n# \u67e5\u770b\u5bf9\u8c61\u8868\u793a\nprint(f\"\u5904\u7406\u5668\u72b6\u6001: {processor}\")<\/code><\/pre>\n\n\n\n<h3 class=\"wp-block-heading\">3.4 \u8bbf\u95ee\u63a7\u5236\u4e0e\u8bbe\u8ba1\u6a21\u5f0f<\/h3>\n\n\n\n<p>\u8bbf\u95ee\u63a7\u5236\u5728\u8bb8\u591a\u8bbe\u8ba1\u6a21\u5f0f\u4e2d\u90fd\u6709\u91cd\u8981\u5e94\u7528\u3002\u4ee5\u4e0b\u662f\u4e00\u4e9b\u5e38\u89c1\u8bbe\u8ba1\u6a21\u5f0f\u4e2d\u8bbf\u95ee\u63a7\u5236\u7684\u4f8b\u5b50\uff1a<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code># ============================================================================\n# \u8bbf\u95ee\u63a7\u5236\u4e0e\u8bbe\u8ba1\u6a21\u5f0f\n# ============================================================================\n\nclass Singleton:\n    \"\"\"\u5355\u4f8b\u6a21\u5f0f\uff1a\u4f7f\u7528\u79c1\u6709\u6784\u9020\u65b9\u6cd5\"\"\"\n\n    __instance = None  # \u79c1\u6709\u7c7b\u53d8\u91cf\n\n    def __new__(cls):\n        if cls.__instance is None:\n            cls.__instance = super().__new__(cls)\n            cls.__instance.__initialized = False\n        return cls.__instance\n\n    def __init__(self):\n        if not self.__initialized:\n            self.data = &#91;]\n            self.__initialized = True\n\n    def add_data(self, item):\n        self.data.append(item)\n\n    def get_data(self):\n        return self.data.copy()\n\nclass Observer:\n    \"\"\"\u89c2\u5bdf\u8005\u6a21\u5f0f\uff1a\u4f7f\u7528\u4fdd\u62a4\u65b9\u6cd5\u8fdb\u884c\u901a\u77e5\"\"\"\n\n    def __init__(self):\n        self._observers = &#91;]  # \u4fdd\u62a4\u5c5e\u6027\uff0c\u6d3e\u751f\u7c7b\u53ef\u4ee5\u8bbf\u95ee\n\n    def attach(self, observer):\n        \"\"\"\u9644\u52a0\u89c2\u5bdf\u8005\"\"\"\n        self._observers.append(observer)\n\n    def detach(self, observer):\n        \"\"\"\u5206\u79bb\u89c2\u5bdf\u8005\"\"\"\n        self._observers.remove(observer)\n\n    def _notify(self, event):\n        \"\"\"\u901a\u77e5\u6240\u6709\u89c2\u5bdf\u8005\uff08\u4fdd\u62a4\u65b9\u6cd5\uff09\"\"\"\n        for observer in self._observers:\n            observer.update(event)\n\nclass Subject(Observer):\n    \"\"\"\u5177\u4f53\u4e3b\u9898\"\"\"\n\n    def __init__(self):\n        super().__init__()\n        self.__state = None  # \u79c1\u6709\u72b6\u6001\n\n    @property\n    def state(self):\n        return self.__state\n\n    @state.setter\n    def state(self, value):\n        self.__state = value\n        self._notify({\"type\": \"state_change\", \"value\": value})  # \u4f7f\u7528\u4fdd\u62a4\u65b9\u6cd5\n\nclass ConcreteObserver:\n    \"\"\"\u5177\u4f53\u89c2\u5bdf\u8005\"\"\"\n\n    def update(self, event):\n        print(f\"\u6536\u5230\u4e8b\u4ef6: {event}\")\n\nprint(\"=== \u8bbe\u8ba1\u6a21\u5f0f\u4e2d\u7684\u8bbf\u95ee\u63a7\u5236 ===\")\n\nprint(\"\\n1. \u5355\u4f8b\u6a21\u5f0f:\")\nsingleton1 = Singleton()\nsingleton1.add_data(\"\u6570\u636e1\")\n\nsingleton2 = Singleton()\nsingleton2.add_data(\"\u6570\u636e2\")\n\nprint(f\"singleton1 \u6570\u636e: {singleton1.get_data()}\")\nprint(f\"singleton2 \u6570\u636e: {singleton2.get_data()}\")\nprint(f\"\u662f\u540c\u4e00\u4e2a\u5b9e\u4f8b: {singleton1 is singleton2}\")\n\nprint(\"\\n2. \u89c2\u5bdf\u8005\u6a21\u5f0f:\")\nsubject = Subject()\nobserver = ConcreteObserver()\n\nsubject.attach(observer)\nsubject.state = \"\u65b0\u72b6\u6001\"  # \u8bbe\u7f6e\u72b6\u6001\u4f1a\u89e6\u53d1\u901a\u77e5<\/code><\/pre>\n\n\n\n<h2 class=\"wp-block-heading\">\u7b2c\u56db\u90e8\u5206\uff1a\u5b9e\u6218\u5e94\u7528 &#8211; \u94f6\u884c\u7cfb\u7edf\u6a21\u62df<\/h2>\n\n\n\n<p>\u8ba9\u6211\u4eec\u901a\u8fc7\u4e00\u4e2a\u5b8c\u6574\u7684\u94f6\u884c\u7cfb\u7edf\u6a21\u62df\u6765\u5c55\u793a\u8bbf\u95ee\u63a7\u5236\u548c\u5c01\u88c5\u7684\u5b9e\u6218\u5e94\u7528\u3002<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code># ============================================================================\n# \u94f6\u884c\u7cfb\u7edf\u6a21\u62df\n# ============================================================================\n\nimport uuid\nimport datetime\nfrom typing import List, Dict, Optional\nfrom abc import ABC, abstractmethod\n\nclass BankError(Exception):\n    \"\"\"\u94f6\u884c\u7cfb\u7edf\u5f02\u5e38\u57fa\u7c7b\"\"\"\n    pass\n\nclass InsufficientFundsError(BankError):\n    \"\"\"\u4f59\u989d\u4e0d\u8db3\u5f02\u5e38\"\"\"\n    pass\n\nclass Transaction:\n    \"\"\"\u4ea4\u6613\u8bb0\u5f55\u7c7b\"\"\"\n\n    def __init__(self, amount: float, transaction_type: str, description: str = \"\"):\n        self.id = str(uuid.uuid4())&#91;:8]\n        self.amount = amount\n        self.type = transaction_type\n        self.description = description\n        self.timestamp = datetime.datetime.now()\n\n    def __str__(self):\n        return (f\"&#91;{self.timestamp.strftime('%Y-%m-%d %H:%M:%S')}] \"\n                f\"{self.type}: {self.amount:.2f} - {self.description}\")\n\nclass BankAccount(ABC):\n    \"\"\"\u94f6\u884c\u8d26\u6237\u62bd\u8c61\u57fa\u7c7b\"\"\"\n\n    def __init__(self, account_holder: str, initial_balance: float = 0):\n        # \u516c\u6709\u4fe1\u606f\n        self.account_holder = account_holder\n        self.account_number = self._generate_account_number()\n\n        # \u4fdd\u62a4\u5c5e\u6027\uff08\u6d3e\u751f\u7c7b\u9700\u8981\u8bbf\u95ee\uff09\n        self._balance = initial_balance\n        self._transactions: List&#91;Transaction] = &#91;]\n        self._is_active = True\n\n        # \u79c1\u6709\u5c5e\u6027\n        self.__pin_hash = None\n        self.__failed_attempts = 0\n        self.__last_access = None\n\n        # \u8bb0\u5f55\u5f00\u6237\u4ea4\u6613\n        self._add_transaction(initial_balance, \"\u5f00\u6237\u5b58\u6b3e\", \"\u521d\u59cb\u5b58\u6b3e\")\n\n    def _generate_account_number(self) -&gt; str:\n        \"\"\"\u751f\u6210\u8d26\u6237\u53f7\u7801\uff08\u4fdd\u62a4\u65b9\u6cd5\uff09\"\"\"\n        import random\n        return f\"{random.randint(10000000, 99999999)}\"\n\n    def _add_transaction(self, amount: float, \n                        transaction_type: str, description: str = \"\"):\n        \"\"\"\u6dfb\u52a0\u4ea4\u6613\u8bb0\u5f55\uff08\u4fdd\u62a4\u65b9\u6cd5\uff09\"\"\"\n        transaction = Transaction(amount, transaction_type, description)\n        self._transactions.append(transaction)\n\n    def set_pin(self, pin: str):\n        \"\"\"\u8bbe\u7f6ePIN\u7801\uff08\u516c\u6709\u65b9\u6cd5\uff09\"\"\"\n        import hashlib\n        self.__pin_hash = hashlib.sha256(pin.encode()).hexdigest()\n\n    def verify_pin(self, pin: str) -&gt; bool:\n        \"\"\"\u9a8c\u8bc1PIN\u7801\uff08\u516c\u6709\u65b9\u6cd5\uff09\"\"\"\n        import hashlib\n        if self.__pin_hash is None:\n            return False\n\n        pin_hash = hashlib.sha256(pin.encode()).hexdigest()\n\n        if pin_hash == self.__pin_hash:\n            self.__failed_attempts = 0\n            self.__last_access = datetime.datetime.now()\n            return True\n        else:\n            self.__failed_attempts += 1\n            if self.__failed_attempts &gt;= 3:\n                self._is_active = False\n                raise BankError(\"\u5bc6\u7801\u9519\u8bef\u6b21\u6570\u8fc7\u591a\uff0c\u8d26\u6237\u5df2\u88ab\u9501\u5b9a\")\n            return False\n\n    def deposit(self, amount: float, description: str = \"\"):\n        \"\"\"\u5b58\u6b3e\uff08\u516c\u6709\u65b9\u6cd5\uff09\"\"\"\n        if amount &lt;= 0:\n            raise ValueError(\"\u5b58\u6b3e\u91d1\u989d\u5fc5\u987b\u5927\u4e8e0\")\n\n        if not self._is_active:\n            raise BankError(\"\u8d26\u6237\u5df2\u88ab\u9501\u5b9a\")\n\n        self._balance += amount\n        self._add_transaction(amount, \"\u5b58\u6b3e\", description)\n        print(f\"\u5b58\u6b3e\u6210\u529f: {amount:.2f}\uff0c\u5f53\u524d\u4f59\u989d: {self._balance:.2f}\")\n\n    @abstractmethod\n    def withdraw(self, amount: float, description: str = \"\") -&gt; bool:\n        \"\"\"\u53d6\u6b3e\uff08\u62bd\u8c61\u65b9\u6cd5\uff0c\u7531\u6d3e\u751f\u7c7b\u5b9e\u73b0\uff09\"\"\"\n        pass\n\n    def transfer(self, amount: float, to_account: 'BankAccount', \n                 description: str = \"\"):\n        \"\"\"\u8f6c\u8d26\uff08\u516c\u6709\u65b9\u6cd5\uff09\"\"\"\n        if not self._is_active:\n            raise BankError(\"\u8d26\u6237\u5df2\u88ab\u9501\u5b9a\")\n\n        # \u5c1d\u8bd5\u4ece\u672c\u8d26\u6237\u53d6\u6b3e\n        if self.withdraw(amount, f\"\u8f6c\u8d26\u7ed9 {to_account.account_holder}\"):\n            # \u5b58\u6b3e\u5230\u76ee\u6807\u8d26\u6237\n            to_account.deposit(amount, f\"\u6765\u81ea {self.account_holder} \u7684\u8f6c\u8d26\")\n\n            # \u8bb0\u5f55\u8f6c\u8d26\n            self._add_transaction(amount, \"\u8f6c\u8d26\", description)\n            print(f\"\u8f6c\u8d26\u6210\u529f: {amount:.2f} \u7ed9 {to_account.account_holder}\")\n\n    def get_balance(self) -&gt; float:\n        \"\"\"\u83b7\u53d6\u4f59\u989d\uff08\u516c\u6709\u65b9\u6cd5\uff09\"\"\"\n        return self._balance\n\n    def get_statement(self, num_transactions: int = 10) -&gt; List&#91;Transaction]:\n        \"\"\"\u83b7\u53d6\u5bf9\u8d26\u5355\uff08\u516c\u6709\u65b9\u6cd5\uff09\"\"\"\n        return self._transactions&#91;-num_transactions:]  # \u8fd4\u56de\u6700\u8fd1N\u7b14\u4ea4\u6613\n\n    def _calculate_interest(self) -&gt; float:\n        \"\"\"\u8ba1\u7b97\u5229\u606f\uff08\u4fdd\u62a4\u65b9\u6cd5\uff0c\u6d3e\u751f\u7c7b\u53ef\u4ee5\u8986\u76d6\uff09\"\"\"\n        return 0.0\n\n    def apply_interest(self):\n        \"\"\"\u5e94\u7528\u5229\u606f\uff08\u516c\u6709\u65b9\u6cd5\uff09\"\"\"\n        interest = self._calculate_interest()\n        if interest &gt; 0:\n            self._balance += interest\n            self._add_transaction(interest, \"\u5229\u606f\", \"\u8d26\u6237\u5229\u606f\")\n            print(f\"\u5229\u606f\u5df2\u5e94\u7528: {interest:.2f}\")\n\n    def __str__(self):\n        return (f\"\u8d26\u6237: {self.account_number} \"\n                f\"\u6237\u4e3b: {self.account_holder} \"\n                f\"\u4f59\u989d: {self._balance:.2f} \"\n                f\"\u72b6\u6001: {'\u6d3b\u8dc3' if self._is_active else '\u9501\u5b9a'}\")\n\nclass SavingsAccount(BankAccount):\n    \"\"\"\u50a8\u84c4\u8d26\u6237\"\"\"\n\n    def __init__(self, account_holder: str, initial_balance: float = 0, \n                 interest_rate: float = 0.02):\n        super().__init__(account_holder, initial_balance)\n        self._interest_rate = interest_rate  # \u4fdd\u62a4\u5c5e\u6027\n        self._min_balance = 100  # \u6700\u4f4e\u4f59\u989d\u8981\u6c42\n\n    def withdraw(self, amount: float, description: str = \"\") -&gt; bool:\n        \"\"\"\u53d6\u6b3e\uff08\u8986\u76d6\u62bd\u8c61\u65b9\u6cd5\uff09\"\"\"\n        if amount &lt;= 0:\n            raise ValueError(\"\u53d6\u6b3e\u91d1\u989d\u5fc5\u987b\u5927\u4e8e0\")\n\n        if not self._is_active:\n            raise BankError(\"\u8d26\u6237\u5df2\u88ab\u9501\u5b9a\")\n\n        if self._balance - amount &lt; self._min_balance:\n            raise InsufficientFundsError(\n                f\"\u4f59\u989d\u4e0d\u8db3\u3002\u53d6\u6b3e\u540e\u4f59\u989d\u4e0d\u80fd\u4f4e\u4e8e {self._min_balance:.2f}\")\n\n        self._balance -= amount\n        self._add_transaction(amount, \"\u53d6\u6b3e\", description)\n        print(f\"\u53d6\u6b3e\u6210\u529f: {amount:.2f}\uff0c\u5f53\u524d\u4f59\u989d: {self._balance:.2f}\")\n        return True\n\n    def _calculate_interest(self) -&gt; float:\n        \"\"\"\u8ba1\u7b97\u5229\u606f\uff08\u8986\u76d6\u4fdd\u62a4\u65b9\u6cd5\uff09\"\"\"\n        return self._balance * self._interest_rate \/ 12  # \u6708\u5229\u606f\n\nclass CheckingAccount(BankAccount):\n    \"\"\"\u652f\u7968\u8d26\u6237\"\"\"\n\n    def __init__(self, account_holder: str, initial_balance: float = 0,\n                 overdraft_limit: float = 500):\n        super().__init__(account_holder, initial_balance)\n        self._overdraft_limit = overdraft_limit  # \u900f\u652f\u989d\u5ea6\n\n    def withdraw(self, amount: float, description: str = \"\") -&gt; bool:\n        \"\"\"\u53d6\u6b3e\uff08\u8986\u76d6\u62bd\u8c61\u65b9\u6cd5\uff09\"\"\"\n        if amount &lt;= 0:\n            raise ValueError(\"\u53d6\u6b3e\u91d1\u989d\u5fc5\u987b\u5927\u4e8e0\")\n\n        if not self._is_active:\n            raise BankError(\"\u8d26\u6237\u5df2\u88ab\u9501\u5b9a\")\n\n        if self._balance - amount &lt; -self._overdraft_limit:\n            raise InsufficientFundsError(\n                f\"\u8d85\u51fa\u900f\u652f\u989d\u5ea6\u3002\u6700\u5927\u53ef\u53d6: {self._balance + self._overdraft_limit:.2f}\")\n\n        self._balance -= amount\n        self._add_transaction(amount, \"\u53d6\u6b3e\", description)\n        print(f\"\u53d6\u6b3e\u6210\u529f: {amount:.2f}\uff0c\u5f53\u524d\u4f59\u989d: {self._balance:.2f}\")\n\n        # \u5982\u679c\u4f59\u989d\u4e3a\u8d1f\uff0c\u6536\u53d6\u900f\u652f\u8d39\n        if self._balance &lt; 0:\n            self._charge_overdraft_fee()\n\n        return True\n\n    def _charge_overdraft_fee(self):\n        \"\"\"\u6536\u53d6\u900f\u652f\u8d39\uff08\u79c1\u6709\u65b9\u6cd5\uff09\"\"\"\n        fee = 25.0\n        self._balance -= fee\n        self._add_transaction(fee, \"\u624b\u7eed\u8d39\", \"\u900f\u652f\u8d39\")\n        print(f\"\u5df2\u6536\u53d6\u900f\u652f\u8d39: {fee:.2f}\")\n\nclass Bank:\n    \"\"\"\u94f6\u884c\u7c7b\"\"\"\n\n    def __init__(self, name: str):\n        self.name = name\n        self.__accounts: Dict&#91;str, BankAccount] = {}  # \u79c1\u6709\uff1a\u8d26\u6237\u5b57\u5178\n        self.__total_deposits = 0.0  # \u79c1\u6709\uff1a\u603b\u5b58\u6b3e\n\n    def open_account(self, account_type: str, account_holder: str, \n                    initial_deposit: float, **kwargs) -&gt; BankAccount:\n        \"\"\"\u5f00\u6237\uff08\u516c\u6709\u65b9\u6cd5\uff09\"\"\"\n        if initial_deposit &lt; 0:\n            raise ValueError(\"\u521d\u59cb\u5b58\u6b3e\u4e0d\u80fd\u4e3a\u8d1f\")\n\n        if account_type == \"savings\":\n            account = SavingsAccount(account_holder, initial_deposit, **kwargs)\n        elif account_type == \"checking\":\n            account = CheckingAccount(account_holder, initial_deposit, **kwargs)\n        else:\n            raise ValueError(f\"\u4e0d\u652f\u6301\u7684\u8d26\u6237\u7c7b\u578b: {account_type}\")\n\n        self.__accounts&#91;account.account_number] = account\n        self.__total_deposits += initial_deposit\n\n        print(f\"\u5f00\u6237\u6210\u529f\uff01\u8d26\u6237\u53f7\u7801: {account.account_number}\")\n        return account\n\n    def get_account(self, account_number: str, pin: str) -&gt; Optional&#91;BankAccount]:\n        \"\"\"\u83b7\u53d6\u8d26\u6237\uff08\u9700\u8981\u9a8c\u8bc1PIN\uff09\"\"\"\n        account = self.__accounts.get(account_number)\n        if account and account.verify_pin(pin):\n            return account\n        return None\n\n    def close_account(self, account_number: str, pin: str) -&gt; bool:\n        \"\"\"\u5173\u95ed\u8d26\u6237\"\"\"\n        account = self.get_account(account_number, pin)\n        if account:\n            if account.get_balance() &gt; 0:\n                print(f\"\u8d26\u6237\u8fd8\u6709\u4f59\u989d {account.get_balance():.2f}\uff0c\u8bf7\u5148\u53d6\u6b3e\")\n                return False\n\n            del self.__accounts&#91;account_number]\n            print(\"\u8d26\u6237\u5df2\u5173\u95ed\")\n            return True\n        return False\n\n    def apply_monthly_interest(self):\n        \"\"\"\u4e3a\u6240\u6709\u50a8\u84c4\u8d26\u6237\u5e94\u7528\u6708\u5229\u606f\"\"\"\n        print(\"\\n=== \u5e94\u7528\u6708\u5229\u606f ===\")\n        for account in self.__accounts.values():\n            if isinstance(account, SavingsAccount):\n                account.apply_interest()\n\n    def get_bank_statistics(self) -&gt; Dict:\n        \"\"\"\u83b7\u53d6\u94f6\u884c\u7edf\u8ba1\u4fe1\u606f\uff08\u516c\u6709\u65b9\u6cd5\uff09\"\"\"\n        total_balance = sum(acc.get_balance() for acc in self.__accounts.values())\n        active_accounts = sum(1 for acc in self.__accounts.values() \n                             if acc._is_active)  # \u8bbf\u95ee\u4fdd\u62a4\u5c5e\u6027\n\n        return {\n            \"bank_name\": self.name,\n            \"total_accounts\": len(self.__accounts),\n            \"active_accounts\": active_accounts,\n            \"total_deposits\": self.__total_deposits,\n            \"total_balance\": total_balance\n        }\n\n    def __str__(self):\n        stats = self.get_bank_statistics()\n        return (f\"\u94f6\u884c: {stats&#91;'bank_name']}\\n\"\n                f\"\u8d26\u6237\u603b\u6570: {stats&#91;'total_accounts']}\\n\"\n                f\"\u603b\u5b58\u6b3e: {stats&#91;'total_deposits']:.2f}\\n\"\n                f\"\u603b\u4f59\u989d: {stats&#91;'total_balance']:.2f}\")\n\n# \u6a21\u62df\u94f6\u884c\u7cfb\u7edf\u8fd0\u884c\ndef simulate_bank_system():\n    \"\"\"\u6a21\u62df\u94f6\u884c\u7cfb\u7edf\u8fd0\u884c\"\"\"\n\n    print(\"=== \u94f6\u884c\u7cfb\u7edf\u6a21\u62df ===\")\n\n    # \u521b\u5efa\u94f6\u884c\n    bank = Bank(\"Python\u94f6\u884c\")\n    print(f\"\u6b22\u8fce\u6765\u5230 {bank.name}!\\n\")\n\n    # \u5f00\u6237\n    print(\"1. \u5f00\u6237\u6d41\u7a0b\")\n    alice_account = bank.open_account(\n        \"savings\", \"Alice\", 1000, interest_rate=0.03\n    )\n    alice_account.set_pin(\"1234\")\n\n    bob_account = bank.open_account(\n        \"checking\", \"Bob\", 500, overdraft_limit=1000\n    )\n    bob_account.set_pin(\"5678\")\n\n    print()\n\n    # \u5b58\u6b3e\n    print(\"2. \u5b58\u6b3e\u64cd\u4f5c\")\n    alice_account.deposit(500, \"\u5de5\u8d44\")\n    print()\n\n    # \u53d6\u6b3e\n    print(\"3. \u53d6\u6b3e\u64cd\u4f5c\")\n    try:\n        alice_account.withdraw(200, \"\u8d2d\u7269\")\n    except InsufficientFundsError as e:\n        print(f\"\u53d6\u6b3e\u5931\u8d25: {e}\")\n    print()\n\n    # \u8f6c\u8d26\n    print(\"4. \u8f6c\u8d26\u64cd\u4f5c\")\n    try:\n        alice_account.transfer(300, bob_account, \"\u8fd8\u6b3e\")\n    except BankError as e:\n        print(f\"\u8f6c\u8d26\u5931\u8d25: {e}\")\n    print()\n\n    # \u83b7\u53d6\u8d26\u6237\u4fe1\u606f\n    print(\"5. \u8d26\u6237\u67e5\u8be2\")\n    account = bank.get_account(alice_account.account_number, \"1234\")\n    if account:\n        print(f\"\u8d26\u6237\u4fe1\u606f: {account}\")\n        print(f\"\u5f53\u524d\u4f59\u989d: {account.get_balance():.2f}\")\n\n        # \u83b7\u53d6\u5bf9\u8d26\u5355\n        print(\"\\n\u6700\u8fd1\u4ea4\u6613:\")\n        for transaction in account.get_statement(5):\n            print(f\"  {transaction}\")\n\n    print()\n\n    # \u5e94\u7528\u5229\u606f\n    print(\"6. \u5229\u606f\u8ba1\u7b97\")\n    bank.apply_monthly_interest()\n\n    print()\n\n    # \u94f6\u884c\u7edf\u8ba1\n    print(\"7. \u94f6\u884c\u7edf\u8ba1\")\n    stats = bank.get_bank_statistics()\n    for key, value in stats.items():\n        print(f\"  {key}: {value}\")\n\n    print()\n\n    # \u5c1d\u8bd5\u975e\u6cd5\u64cd\u4f5c\n    print(\"8. \u5b89\u5168\u6d4b\u8bd5\")\n    try:\n        # \u5c1d\u8bd5\u8bbf\u95ee\u79c1\u6709\u5c5e\u6027\n        # print(alice_account.__pin_hash)  # \u9519\u8bef\n        pass\n    except AttributeError as e:\n        print(f\"\u5b89\u5168\u6d4b\u8bd5\u901a\u8fc7: \u65e0\u6cd5\u8bbf\u95ee\u79c1\u6709\u5c5e\u6027\")\n\n    # \u5c1d\u8bd5\u9519\u8befPIN\n    try:\n        bank.get_account(alice_account.account_number, \"9999\")\n    except BankError as e:\n        print(f\"\u5b89\u5168\u6d4b\u8bd5: {e}\")\n\n# \u8fd0\u884c\u6a21\u62df\nif __name__ == \"__main__\":\n    simulate_bank_system()<\/code><\/pre>\n\n\n\n<p>\u8fd9\u4e2a\u94f6\u884c\u7cfb\u7edf\u6a21\u62df\u5c55\u793a\u4e86\uff1a<\/p>\n\n\n\n<ol class=\"wp-block-list\">\n<li><strong>\u4e25\u683c\u7684\u8bbf\u95ee\u63a7\u5236<\/strong>\uff1a<\/li>\n<\/ol>\n\n\n\n<ul class=\"wp-block-list\">\n<li>\u516c\u6709\u65b9\u6cd5\uff1a<code>deposit()<\/code>, <code>withdraw()<\/code>, <code>transfer()<\/code><\/li>\n\n\n\n<li>\u4fdd\u62a4\u65b9\u6cd5\uff1a<code>_add_transaction()<\/code>, <code>_calculate_interest()<\/code><\/li>\n\n\n\n<li>\u79c1\u6709\u5c5e\u6027\uff1a<code>__pin_hash<\/code>, <code>__failed_attempts<\/code><\/li>\n<\/ul>\n\n\n\n<ol class=\"wp-block-list\">\n<li><strong>\u826f\u597d\u7684\u5c01\u88c5<\/strong>\uff1a<\/li>\n<\/ol>\n\n\n\n<ul class=\"wp-block-list\">\n<li>\u9690\u85cf\u4e86PIN\u7801\u7684\u5b58\u50a8\u548c\u9a8c\u8bc1\u7ec6\u8282<\/li>\n\n\n\n<li>\u5c01\u88c5\u4e86\u4ea4\u6613\u8bb0\u5f55\u7684\u5185\u90e8\u7ba1\u7406<\/li>\n\n\n\n<li>\u5bf9\u5916\u63d0\u4f9b\u7b80\u6d01\u7684\u8d26\u6237\u64cd\u4f5c\u63a5\u53e3<\/li>\n<\/ul>\n\n\n\n<ol class=\"wp-block-list\">\n<li><strong>\u7ee7\u627f\u4e2d\u7684\u8bbf\u95ee\u63a7\u5236<\/strong>\uff1a<\/li>\n<\/ol>\n\n\n\n<ul class=\"wp-block-list\">\n<li>\u57fa\u7c7b\u5b9a\u4e49\u4fdd\u62a4\u65b9\u6cd5\u4f9b\u6d3e\u751f\u7c7b\u4f7f\u7528<\/li>\n\n\n\n<li>\u6d3e\u751f\u7c7b\u53ef\u4ee5\u8986\u76d6\u4fdd\u62a4\u65b9\u6cd5\u5b9e\u73b0\u7279\u5b9a\u903b\u8f91<\/li>\n<\/ul>\n\n\n\n<ol class=\"wp-block-list\">\n<li><strong>\u5f02\u5e38\u5904\u7406<\/strong>\uff1a<\/li>\n<\/ol>\n\n\n\n<ul class=\"wp-block-list\">\n<li>\u4f7f\u7528\u81ea\u5b9a\u4e49\u5f02\u5e38\u7c7b<\/li>\n\n\n\n<li>\u5728\u9002\u5f53\u7684\u4f4d\u7f6e\u629b\u51fa\u548c\u6355\u83b7\u5f02\u5e38<\/li>\n<\/ul>\n\n\n\n<h2 class=\"wp-block-heading\">\u7b2c\u4e94\u90e8\u5206\uff1a\u5e38\u89c1\u95ee\u9898\u4e0e\u6700\u4f73\u5b9e\u8df5<\/h2>\n\n\n\n<h3 class=\"wp-block-heading\">\u5e38\u89c1\u95ee\u9898\u89e3\u7b54<\/h3>\n\n\n\n<p><strong>Q1: \u4ec0\u4e48\u65f6\u5019\u5e94\u8be5\u4f7f\u7528\u516c\u6709\u3001\u4fdd\u62a4\u3001\u79c1\u6709\u6210\u5458\uff1f<\/strong><\/p>\n\n\n\n<p><strong>A1:<\/strong><\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li><strong>\u516c\u6709\u6210\u5458<\/strong>\uff1a\u6784\u6210\u7c7b\u516c\u5171\u63a5\u53e3\u7684\u90e8\u5206\uff0c\u5916\u90e8\u9700\u8981\u9891\u7e41\u8bbf\u95ee\u7684\u64cd\u4f5c<\/li>\n\n\n\n<li><strong>\u4fdd\u62a4\u6210\u5458<\/strong>\uff1a\u4f9b\u6d3e\u751f\u7c7b\u4f7f\u7528\u7684\u5185\u90e8\u5b9e\u73b0\u7ec6\u8282\uff0c\u5916\u90e8\u4e0d\u5e94\u76f4\u63a5\u8bbf\u95ee<\/li>\n\n\n\n<li><strong>\u79c1\u6709\u6210\u5458<\/strong>\uff1a\u7c7b\u5185\u90e8\u4f7f\u7528\u7684\u5b9e\u73b0\u7ec6\u8282\uff0c\u6d3e\u751f\u7c7b\u4e5f\u4e0d\u5e94\u76f4\u63a5\u8bbf\u95ee<\/li>\n<\/ul>\n\n\n\n<p><strong>\u7b80\u5355\u89c4\u5219<\/strong>\uff1a\u9ed8\u8ba4\u4f7f\u7528\u79c1\u6709\uff0c\u9700\u8981\u7ee7\u627f\u65f6\u4f7f\u7528\u4fdd\u62a4\uff0c\u6784\u6210API\u65f6\u4f7f\u7528\u516c\u6709\u3002<\/p>\n\n\n\n<p><strong>Q2: Python\u7684\u4e0b\u5212\u7ebf\u7ea6\u5b9a\u771f\u7684\u6709\u6548\u5417\uff1f<\/strong><\/p>\n\n\n\n<p><strong>A2:<\/strong><br>\u662f\u7684\uff0c\u5c3d\u7ba1Python\u4e0d\u5f3a\u5236\uff0c\u4f46\u7ea6\u5b9a\u975e\u5e38\u91cd\u8981\uff1a<\/p>\n\n\n\n<ol class=\"wp-block-list\">\n<li>\u5355\u4e0b\u5212\u7ebf<code>_name<\/code>\uff1a\u544a\u8bc9\u5176\u4ed6\u7a0b\u5e8f\u5458&#8221;\u8fd9\u662f\u5185\u90e8\u5b9e\u73b0\uff0c\u4e0d\u8981\u5728\u5916\u90e8\u4f7f\u7528&#8221;<\/li>\n\n\n\n<li>\u53cc\u4e0b\u5212\u7ebf<code>__name<\/code>\uff1a\u89e6\u53d1\u540d\u79f0\u4fee\u9970\uff0c\u9632\u6b62\u610f\u5916\u8986\u76d6\uff0c\u4f46\u4e0d\u662f\u771f\u6b63\u7684\u5b89\u5168\u673a\u5236<\/li>\n\n\n\n<li>\u5927\u591a\u6570Python\u7a0b\u5e8f\u5458\u90fd\u4f1a\u9075\u5b88\u8fd9\u4e9b\u7ea6\u5b9a<\/li>\n<\/ol>\n\n\n\n<p><strong>Q3: \u5982\u4f55\u51b3\u5b9a\u4e00\u4e2a\u65b9\u6cd5\u5e94\u8be5\u662f\u516c\u6709\u8fd8\u662f\u79c1\u6709\uff1f<\/strong><\/p>\n\n\n\n<p><strong>A3:<\/strong><br>\u95ee\u81ea\u5df1\u8fd9\u4e9b\u95ee\u9898\uff1a<\/p>\n\n\n\n<ol class=\"wp-block-list\">\n<li>\u8fd9\u4e2a\u65b9\u6cd5\u662f\u5426\u662f\u7c7b\u7684\u4e3b\u8981\u529f\u80fd\uff1f<\/li>\n\n\n\n<li>\u5916\u90e8\u4ee3\u7801\u662f\u5426\u9700\u8981\u8c03\u7528\u8fd9\u4e2a\u65b9\u6cd5\uff1f<\/li>\n\n\n\n<li>\u5982\u679c\u8fd9\u4e2a\u65b9\u6cd5\u7684\u5b9e\u73b0\u6539\u53d8\u4e86\uff0c\u5916\u90e8\u4ee3\u7801\u662f\u5426\u9700\u8981\u4fee\u6539\uff1f<\/li>\n\n\n\n<li>\u8fd9\u4e2a\u65b9\u6cd5\u662f\u5426\u64cd\u4f5c\u6216\u66b4\u9732\u4e86\u5185\u90e8\u72b6\u6001\uff1f<\/li>\n<\/ol>\n\n\n\n<p>\u5982\u679c1\u548c2\u4e3a&#8221;\u662f&#8221;\uff0c\u8003\u8651\u8bbe\u4e3a\u516c\u6709\uff1b\u5982\u679c3\u548c4\u4e3a&#8221;\u662f&#8221;\uff0c\u8003\u8651\u8bbe\u4e3a\u79c1\u6709\u6216\u4fdd\u62a4\u3002<\/p>\n\n\n\n<p><strong>Q4: \u8bbf\u95ee\u63a7\u5236\u4f1a\u5f71\u54cd\u6027\u80fd\u5417\uff1f<\/strong><\/p>\n\n\n\n<p><strong>A4:<\/strong><br>\u901a\u5e38\u5f71\u54cd\u53ef\u4ee5\u5ffd\u7565\u4e0d\u8ba1\uff1a<\/p>\n\n\n\n<ol class=\"wp-block-list\">\n<li>\u5927\u591a\u6570\u8bed\u8a00\u7684\u8bbf\u95ee\u63a7\u5236\u5728\u7f16\u8bd1\u65f6\u68c0\u67e5\uff0c\u8fd0\u884c\u65f6\u65e0\u5f00\u9500<\/li>\n\n\n\n<li>Getter\/Setter\u65b9\u6cd5\u8c03\u7528\u53ef\u80fd\u6709\u8f7b\u5fae\u5f00\u9500\uff0c\u4f46\u73b0\u4ee3\u4f18\u5316\u5668\u53ef\u4ee5\u5185\u8054<\/li>\n\n\n\n<li>\u771f\u6b63\u7684\u6027\u80fd\u95ee\u9898\u901a\u5e38\u6765\u81ea\u7b97\u6cd5\u548c\u6570\u636e\u7ed3\u6784\uff0c\u800c\u4e0d\u662f\u8bbf\u95ee\u63a7\u5236<\/li>\n<\/ol>\n\n\n\n<h3 class=\"wp-block-heading\">\u6700\u4f73\u5b9e\u8df5\u603b\u7ed3<\/h3>\n\n\n\n<ol class=\"wp-block-list\">\n<li><strong>\u6700\u5c0f\u5316\u516c\u5171\u63a5\u53e3<\/strong>\uff1a<\/li>\n<\/ol>\n\n\n\n<pre class=\"wp-block-code\"><code>   # \u597d\uff1a\u53ea\u66b4\u9732\u5fc5\u8981\u7684\u63a5\u53e3\n   class Stack:\n       def push(self, item): ...\n       def pop(self): ...\n       def peek(self): ...\n       # \u4e0d\u66b4\u9732\u5185\u90e8\u5217\u8868\n\n   # \u4e0d\u597d\uff1a\u66b4\u9732\u592a\u591a\u5185\u90e8\u7ec6\u8282\n   class BadStack:\n       def __init__(self):\n           self.items = &#91;]  # \u76f4\u63a5\u66b4\u9732\u5185\u90e8\u5217\u8868<\/code><\/pre>\n\n\n\n<ol start=\"2\" class=\"wp-block-list\">\n<li><strong>\u4f7f\u7528\u5c5e\u6027\u8bbf\u95ee\u5668<\/strong>\uff1a<\/li>\n<\/ol>\n\n\n\n<pre class=\"wp-block-code\"><code>   # \u597d\uff1a\u4f7f\u7528@property\n   class Circle:\n       def __init__(self, radius):\n           self._radius = radius\n\n       @property\n       def radius(self):\n           return self._radius\n\n       @property\n       def area(self):\n           return 3.14 * self._radius ** 2\n\n   # \u4e0d\u597d\uff1a\u76f4\u63a5\u66b4\u9732\u5c5e\u6027\n   class BadCircle:\n       def __init__(self, radius):\n           self.radius = radius  # \u53ef\u4ee5\u76f4\u63a5\u4fee\u6539\uff0c\u53ef\u80fd\u5bfc\u81f4\u65e0\u6548\u72b6\u6001<\/code><\/pre>\n\n\n\n<ol start=\"3\" class=\"wp-block-list\">\n<li><strong>\u4fdd\u6301\u4e00\u81f4\u6027<\/strong>\uff1a<\/li>\n<\/ol>\n\n\n\n<pre class=\"wp-block-code\"><code>   # \u597d\uff1a\u76f8\u4f3c\u7684\u7c7b\u6709\u76f8\u4f3c\u7684\u63a5\u53e3\n   class Animal:\n       def speak(self): ...\n\n   class Dog(Animal):\n       def speak(self): return \"Woof!\"\n\n   class Cat(Animal):\n       def speak(self): return \"Meow!\"<\/code><\/pre>\n\n\n\n<ol start=\"4\" class=\"wp-block-list\">\n<li><strong>\u6587\u6863\u5316\u516c\u5171\u63a5\u53e3<\/strong>\uff1a<\/li>\n<\/ol>\n\n\n\n<pre class=\"wp-block-code\"><code>   class Database:\n       def query(self, sql: str, params: dict = None) -&gt; List&#91;dict]:\n           \"\"\"\n           \u6267\u884cSQL\u67e5\u8be2\n\n           Args:\n               sql: SQL\u67e5\u8be2\u8bed\u53e5\n               params: \u67e5\u8be2\u53c2\u6570\n\n           Returns:\n               \u67e5\u8be2\u7ed3\u679c\u5217\u8868\n\n           Raises:\n               DatabaseError: \u67e5\u8be2\u5931\u8d25\u65f6\u629b\u51fa\n           \"\"\"\n           ...<\/code><\/pre>\n\n\n\n<ol start=\"5\" class=\"wp-block-list\">\n<li><strong>\u8003\u8651\u4e0d\u53ef\u53d8\u5bf9\u8c61<\/strong>\uff1a<\/li>\n<\/ol>\n\n\n\n<pre class=\"wp-block-code\"><code>   # \u597d\uff1a\u4e0d\u53ef\u53d8\u5bf9\u8c61\u66f4\u5b89\u5168\n   class Point:\n       def __init__(self, x, y):\n           self._x = x\n           self._y = y\n\n       @property\n       def x(self):\n           return self._x\n\n       @property\n       def y(self):\n           return self._y\n\n       def with_x(self, x):\n           return Point(x, self._y)\n\n       def with_y(self, y):\n           return Point(self._x, y)<\/code><\/pre>\n\n\n\n<ol start=\"6\" class=\"wp-block-list\">\n<li><strong>\u907f\u514d\u8fc7\u5ea6\u5c01\u88c5<\/strong>\uff1a<\/li>\n<\/ol>\n\n\n\n<pre class=\"wp-block-code\"><code>   # \u4e0d\u597d\uff1a\u8fc7\u5ea6\u5c01\u88c5\uff0c\u4f7f\u7528\u4e0d\u4fbf\n   class OverEncapsulated:\n       def __init__(self):\n           self.__a = None\n           self.__b = None\n           self.__c = None\n\n       def set_a(self, value): self.__a = value\n       def get_a(self): return self.__a\n       def set_b(self, value): self.__b = value\n       def get_b(self): return self._b\n       # ... \u592a\u591agetter\/setter\n\n   # \u597d\uff1a\u5e73\u8861\u7684\u5c01\u88c5\n   class WellEncapsulated:\n       def __init__(self, a, b, c):\n           self.a = a  # \u7b80\u5355\u5c5e\u6027\u53ef\u4ee5\u76f4\u63a5\u516c\u5f00\n           self._b = b  # \u9700\u8981\u4fdd\u62a4\u7684\u5c5e\u6027\n           self.__c = c  # \u771f\u6b63\u79c1\u6709\u7684\u5c5e\u6027<\/code><\/pre>\n\n\n\n<h2 class=\"wp-block-heading\">\u7b2c\u516d\u90e8\u5206\uff1a\u5b66\u4e60\u603b\u7ed3<\/h2>\n\n\n\n<h3 class=\"wp-block-heading\">\u6838\u5fc3\u6982\u5ff5\u56de\u987e<\/h3>\n\n\n\n<ol class=\"wp-block-list\">\n<li><strong>\u8bbf\u95ee\u63a7\u5236\u7ea7\u522b<\/strong>\uff1a<\/li>\n<\/ol>\n\n\n\n<ul class=\"wp-block-list\">\n<li>\u516c\u6709\uff08public\uff09\uff1a\u4efb\u4f55\u5730\u65b9\u53ef\u8bbf\u95ee<\/li>\n\n\n\n<li>\u4fdd\u62a4\uff08protected\uff09\uff1a\u7c7b\u5185\u548c\u6d3e\u751f\u7c7b\u53ef\u8bbf\u95ee<\/li>\n\n\n\n<li>\u79c1\u6709\uff08private\uff09\uff1a\u4ec5\u7c7b\u5185\u53ef\u8bbf\u95ee<\/li>\n<\/ul>\n\n\n\n<ol class=\"wp-block-list\">\n<li><strong>\u5c01\u88c5\u7684\u76ee\u7684<\/strong>\uff1a<\/li>\n<\/ol>\n\n\n\n<ul class=\"wp-block-list\">\n<li>\u9690\u85cf\u5b9e\u73b0\u7ec6\u8282<\/li>\n\n\n\n<li>\u63d0\u9ad8\u53ef\u7ef4\u62a4\u6027<\/li>\n\n\n\n<li>\u589e\u5f3a\u5b89\u5168\u6027<\/li>\n\n\n\n<li>\u7b80\u5316\u63a5\u53e3<\/li>\n<\/ul>\n\n\n\n<ol class=\"wp-block-list\">\n<li><strong>\u5404\u8bed\u8a00\u5b9e\u73b0<\/strong>\uff1a<\/li>\n<\/ol>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Python\uff1a\u57fa\u4e8e\u7ea6\u5b9a<\/li>\n\n\n\n<li>Java\/C++\uff1a\u4e25\u683c\uff0c\u7f16\u8bd1\u65f6\u68c0\u67e5<\/li>\n\n\n\n<li>JavaScript\uff1aES6+\u5f15\u5165\u771f\u6b63\u7684\u79c1\u6709\u5b57\u6bb5<\/li>\n<\/ul>\n\n\n\n<h3 class=\"wp-block-heading\">\u5173\u952e\u6280\u80fd\u638c\u63e1<\/h3>\n\n\n\n<ol class=\"wp-block-list\">\n<li><strong>\u6b63\u786e\u4f7f\u7528\u8bbf\u95ee\u4fee\u9970\u7b26<\/strong>\uff1a\u6839\u636e\u6210\u5458\u7684\u4f5c\u7528\u8303\u56f4\u9009\u62e9\u5408\u9002\u7684\u8bbf\u95ee\u7ea7\u522b<\/li>\n\n\n\n<li><strong>\u8bbe\u8ba1\u826f\u597d\u7684\u516c\u5171\u63a5\u53e3<\/strong>\uff1a\u6700\u5c0f\u5316\u3001\u4e00\u81f4\u6027\u3001\u5b8c\u6574\u6027<\/li>\n\n\n\n<li><strong>\u5b9e\u73b0\u5c5e\u6027\u8bbf\u95ee\u63a7\u5236<\/strong>\uff1a\u4f7f\u7528getter\/setter\u6216\u5c5e\u6027\u88c5\u9970\u5668<\/li>\n\n\n\n<li><strong>\u5728\u7ee7\u627f\u4e2d\u5408\u7406\u4f7f\u7528\u4fdd\u62a4\u6210\u5458<\/strong>\uff1a\u5e73\u8861\u91cd\u7528\u6027\u548c\u5c01\u88c5\u6027<\/li>\n<\/ol>\n\n\n\n<h3 class=\"wp-block-heading\">\u6700\u7ec8\u601d\u8003<\/h3>\n\n\n\n<p>\u5c01\u88c5\u548c\u8bbf\u95ee\u63a7\u5236\u4e0d\u4ec5\u662f\u8bed\u6cd5\u7279\u6027\uff0c\u66f4\u662f\u8f6f\u4ef6\u8bbe\u8ba1\u54f2\u5b66\u3002\u597d\u7684\u5c01\u88c5\u5c31\u50cf\u597d\u7684\u5efa\u7b51\uff1a\u5916\u90e8\u7f8e\u89c2\u7b80\u6d01\uff0c\u5185\u90e8\u7ed3\u6784\u7a33\u56fa\u3002\u901a\u8fc7\u4eca\u5929\u7684\u8bfe\u7a0b\uff0c\u4f60\u5e94\u8be5\uff1a<\/p>\n\n\n\n<ol class=\"wp-block-list\">\n<li>\u7406\u89e3\u4e0d\u540c\u8bbf\u95ee\u7ea7\u522b\u7684\u542b\u4e49\u548c\u7528\u9014<\/li>\n\n\n\n<li>\u638c\u63e1\u5404\u79cd\u8bed\u8a00\u4e2d\u5b9e\u73b0\u8bbf\u95ee\u63a7\u5236\u7684\u65b9\u6cd5<\/li>\n\n\n\n<li>\u80fd\u591f\u8bbe\u8ba1\u826f\u597d\u5c01\u88c5\u7684\u7c7b<\/li>\n\n\n\n<li>\u5728\u5b9e\u9645\u9879\u76ee\u4e2d\u5408\u7406\u5e94\u7528\u5c01\u88c5\u539f\u5219<\/li>\n<\/ol>\n\n\n\n<p>\u8bb0\u4f4f\uff1a\u5c01\u88c5\u7684\u76ee\u6807\u4e0d\u662f\u8ba9\u4ee3\u7801\u96be\u4ee5\u7406\u89e3\uff0c\u800c\u662f\u8ba9\u4ee3\u7801\u66f4\u5bb9\u6613\u6b63\u786e\u4f7f\u7528\u3002\u597d\u7684\u5c01\u88c5\u8ba9\u6b63\u786e\u7684\u4e8b\u60c5\u5bb9\u6613\u505a\uff0c\u9519\u8bef\u7684\u4e8b\u60c5\u96be\u4ee5\u505a\u3002<\/p>\n\n\n\n<p>\u9762\u5411\u5bf9\u8c61\u7f16\u7a0b\u7684\u827a\u672f\u5728\u4e8e\u627e\u5230\u62bd\u8c61\u548c\u5177\u4f53\u7684\u5e73\u8861\uff0c\u800c\u5c01\u88c5\u662f\u5b9e\u73b0\u8fd9\u4e00\u5e73\u8861\u7684\u5173\u952e\u5de5\u5177\u3002\u901a\u8fc7\u4e0d\u65ad\u5b9e\u8df5\u548c\u53cd\u601d\uff0c\u4f60\u5c06\u9010\u6e10\u638c\u63e1\u8fd9\u95e8\u827a\u672f\u3002<\/p>\n\n\n\n<p>\u7b2c\u56db\u5341\u516d\u8bfe\uff1a\u7c7b\u6210\u5458\u7684\u8bbf\u95ee\u63a7\u5236\u4e0e\u5c01\u88c5\u827a\u672f\uff01\u5b8c<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">\u7b2c\u56db\u5341\u4e03\u8bfe\uff1a\u9759\u6001\u6210\u5458\u4e0e\u5b9e\u4f8b\u6210\u5458<\/h2>\n\n\n\n<h2 class=\"wp-block-heading\">\u524d\u8a00\uff1a\u7c7b\u7684\u4e24\u79cd\u7ef4\u5ea6<\/h2>\n\n\n\n<p>\u5728\u9762\u5411\u5bf9\u8c61\u7f16\u7a0b\u4e2d\uff0c\u7c7b\u4e0d\u4ec5\u5b9a\u4e49\u4e86\u5bf9\u8c61\u7684\u84dd\u56fe\uff0c\u8fd8\u62e5\u6709\u81ea\u8eab\u72ec\u7279\u7684\u5c5e\u6027\u548c\u884c\u4e3a\u3002\u9759\u6001\u6210\u5458\u548c\u5b9e\u4f8b\u6210\u5458\u4ee3\u8868\u4e86\u7c7b\u7684\u4e24\u4e2a\u4e0d\u540c\u7ef4\u5ea6\uff1a<strong>\u7c7b\u7ea7\u522b\u7684\u5171\u4eab\u7ef4\u5ea6<\/strong>\u548c<strong>\u5b9e\u4f8b\u7ea7\u522b\u7684\u4e2a\u4f53\u7ef4\u5ea6<\/strong>\u3002<\/p>\n\n\n\n<p>\u4eca\u5929\uff0c\u6211\u4eec\u5c06\u6df1\u5165\u63a2\u8ba8\u9759\u6001\u6210\u5458\uff08\u7c7b\u53d8\u91cf\u3001\u7c7b\u65b9\u6cd5\u3001\u9759\u6001\u65b9\u6cd5\uff09\u548c\u5b9e\u4f8b\u6210\u5458\uff08\u5b9e\u4f8b\u53d8\u91cf\u3001\u5b9e\u4f8b\u65b9\u6cd5\uff09\u7684\u672c\u8d28\u533a\u522b\u3001\u5e94\u7528\u573a\u666f\u4ee5\u53ca\u5b83\u4eec\u5728\u9762\u5411\u5bf9\u8c61\u8bbe\u8ba1\u4e2d\u7684\u54f2\u5b66\u610f\u4e49\u3002<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">\u7b2c\u4e00\u90e8\u5206\uff1a\u5b9e\u4f8b\u6210\u5458 &#8211; \u5bf9\u8c61\u7684\u72ec\u7279\u6027<\/h2>\n\n\n\n<h3 class=\"wp-block-heading\">1.1 \u5b9e\u4f8b\u53d8\u91cf\u7684\u672c\u8d28<\/h3>\n\n\n\n<p>\u5b9e\u4f8b\u53d8\u91cf\u662f\u5bf9\u8c61\u4e2a\u4f53\u7279\u5f81\u7684\u8f7d\u4f53\uff0c\u6bcf\u4e2a\u5bf9\u8c61\u90fd\u6709\u81ea\u5df1\u72ec\u7acb\u7684\u72b6\u6001\u7a7a\u95f4\u3002\u8fd9\u79cd\u72ec\u7acb\u6027\u662f\u9762\u5411\u5bf9\u8c61\u7f16\u7a0b\u4e2d<strong>\u5bf9\u8c61\u8eab\u4efd<\/strong>\u7684\u57fa\u7840\u3002<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code># ============================================================================\n# \u5b9e\u4f8b\u53d8\u91cf\u7684\u672c\u8d28\uff1a\u5bf9\u8c61\u7684\u72ec\u7acb\u72b6\u6001\n# ============================================================================\n\nclass Human:\n    \"\"\"\u4eba\u7c7b\uff1a\u5c55\u793a\u5b9e\u4f8b\u53d8\u91cf\u7684\u72ec\u7279\u6027\"\"\"\n\n    def __init__(self, name: str, age: int):\n        # \u5b9e\u4f8b\u53d8\u91cf\u5b9a\u4e49\u5bf9\u8c61\u7684\u72ec\u7279\u72b6\u6001\n        self.name = name  # \u6bcf\u4e2a\u4eba\u7684\u540d\u5b57\u4e0d\u540c\n        self.age = age    # \u6bcf\u4e2a\u4eba\u7684\u5e74\u9f84\u4e0d\u540c\n        self.memories = &#91;]  # \u6bcf\u4e2a\u4eba\u7684\u8bb0\u5fc6\u4e0d\u540c\n\n    def experience(self, event: str):\n        \"\"\"\u7ecf\u5386\u4e8b\u4ef6\uff1a\u6539\u53d8\u5bf9\u8c61\u72b6\u6001\"\"\"\n        self.memories.append({\n            'age': self.age,\n            'event': event,\n            'timestamp': self.__get_timestamp()\n        })\n        print(f\"{self.name} \u7ecf\u5386\u4e86: {event}\")\n\n    def celebrate_birthday(self):\n        \"\"\"\u5e86\u795d\u751f\u65e5\uff1a\u6539\u53d8\u5b9e\u4f8b\u53d8\u91cf\"\"\"\n        self.age += 1\n        self.experience(f\"{self.age}\u5c81\u751f\u65e5\")\n\n    def __get_timestamp(self):\n        \"\"\"\u83b7\u53d6\u65f6\u95f4\u6233\uff08\u79c1\u6709\u65b9\u6cd5\uff09\"\"\"\n        import datetime\n        return datetime.datetime.now().strftime(\"%Y-%m-%d %H:%M:%S\")\n\n    def get_life_story(self):\n        \"\"\"\u83b7\u53d6\u4eba\u751f\u6545\u4e8b\"\"\"\n        story = f\"{self.name}\u7684\u4eba\u751f\u8f68\u8ff9\uff08{self.age}\u5c81\uff09:\\n\"\n        for memory in self.memories:\n            story += f\"  {memory&#91;'age']}\u5c81\u65f6: {memory&#91;'event']} ({memory&#91;'timestamp']})\\n\"\n        return story\n\nprint(\"=== \u5b9e\u4f8b\u53d8\u91cf\u7684\u72ec\u7279\u6027\u6f14\u793a ===\")\n\n# \u521b\u5efa\u4e24\u4e2a\u4e0d\u540c\u7684\u4eba\nalice = Human(\"\u7231\u4e3d\u4e1d\", 25)\nbob = Human(\"\u9c8d\u52c3\", 30)\n\n# \u5404\u81ea\u7ecf\u5386\u4e0d\u540c\u7684\u4e8b\u4ef6\nalice.experience(\"\u5927\u5b66\u6bd5\u4e1a\")\nalice.celebrate_birthday()\nalice.experience(\"\u627e\u5230\u7b2c\u4e00\u4efd\u5de5\u4f5c\")\n\nbob.experience(\"\u7ed3\u5a5a\")\nbob.celebrate_birthday()\nbob.experience(\"\u4e70\u623f\")\n\n# \u5c55\u793a\u5404\u81ea\u7684\u4eba\u751f\u8f68\u8ff9\nprint(\"\\n\" + alice.get_life_story())\nprint(\"\\n\" + bob.get_life_story())\n\n# \u8bc1\u660e\u5b9e\u4f8b\u53d8\u91cf\u7684\u72ec\u7acb\u6027\nprint(f\"\\n\u5b9e\u4f8b\u53d8\u91cf\u72ec\u7acb\u6027\u9a8c\u8bc1:\")\nprint(f\"\u7231\u4e3d\u4e1d\u7684\u5e74\u9f84: {alice.age}, \u8bb0\u5fc6\u6570\u91cf: {len(alice.memories)}\")\nprint(f\"\u9c8d\u52c3\u7684\u5e74\u9f84: {bob.age}, \u8bb0\u5fc6\u6570\u91cf: {len(bob.memories)}\")\nprint(f\"\u4e24\u8005\u662f\u540c\u4e00\u4e2a\u5bf9\u8c61\u5417? {alice is bob}\")\nprint(f\"\u4e24\u8005\u8bb0\u5fc6\u662f\u540c\u4e00\u4e2a\u5217\u8868\u5417? {alice.memories is bob.memories}\")<\/code><\/pre>\n\n\n\n<h3 class=\"wp-block-heading\">1.2 \u5b9e\u4f8b\u65b9\u6cd5\u7684\u54f2\u5b66<\/h3>\n\n\n\n<p>\u5b9e\u4f8b\u65b9\u6cd5\u662f\u5bf9\u8c61\u884c\u4e3a\u7684\u4f53\u73b0\uff0c\u5b83\u64cd\u4f5c\u5bf9\u8c61\u7684\u5185\u90e8\u72b6\u6001\u5e76\u5bf9\u5916\u754c\u4f5c\u51fa\u54cd\u5e94\u3002\u5b9e\u4f8b\u65b9\u6cd5\u4e2d\u7684<code>self<\/code>\u53c2\u6570\u4e0d\u4ec5\u4ec5\u662f\u8bed\u6cd5\u8981\u6c42\uff0c\u66f4\u662f<strong>\u5bf9\u8c61\u81ea\u6211\u610f\u8bc6<\/strong>\u7684\u4f53\u73b0\u3002<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code># ============================================================================\n# \u5b9e\u4f8b\u65b9\u6cd5\u7684\u54f2\u5b66\uff1a\u5bf9\u8c61\u7684\u884c\u4e3a\u80fd\u529b\n# ============================================================================\n\nclass BankAccount:\n    \"\"\"\u94f6\u884c\u8d26\u6237\uff1a\u5c55\u793a\u5b9e\u4f8b\u65b9\u6cd5\u5982\u4f55\u64cd\u4f5c\u5bf9\u8c61\u72b6\u6001\"\"\"\n\n    def __init__(self, owner: str, account_type: str):\n        self.owner = owner\n        self.account_type = account_type\n        self._balance = 0  # \u79c1\u6709\u5b9e\u4f8b\u53d8\u91cf\n        self._transaction_history = &#91;]\n\n    # \u5b9e\u4f8b\u65b9\u6cd5\u64cd\u4f5c\u5bf9\u8c61\u72b6\u6001\n    def deposit(self, amount: float) -&gt; bool:\n        \"\"\"\u5b58\u6b3e\uff1a\u6539\u53d8\u5bf9\u8c61\u72b6\u6001\"\"\"\n        if amount &lt;= 0:\n            print(\"\u5b58\u6b3e\u91d1\u989d\u5fc5\u987b\u5927\u4e8e0\")\n            return False\n\n        self._balance += amount\n        self._record_transaction(\"\u5b58\u6b3e\", amount)\n        self._update_credit_score(amount * 0.01)  # \u5185\u90e8\u65b9\u6cd5\u8c03\u7528\n        return True\n\n    def withdraw(self, amount: float) -&gt; bool:\n        \"\"\"\u53d6\u6b3e\uff1a\u64cd\u4f5c\u5bf9\u8c61\u72b6\u6001\"\"\"\n        if amount &lt;= 0:\n            print(\"\u53d6\u6b3e\u91d1\u989d\u5fc5\u987b\u5927\u4e8e0\")\n            return False\n\n        if amount &gt; self._balance:\n            print(f\"\u4f59\u989d\u4e0d\u8db3\uff0c\u5f53\u524d\u4f59\u989d: {self._balance}\")\n            return False\n\n        self._balance -= amount\n        self._record_transaction(\"\u53d6\u6b3e\", amount)\n        return True\n\n    def transfer(self, target_account: 'BankAccount', amount: float) -&gt; bool:\n        \"\"\"\u8f6c\u8d26\uff1a\u4e0e\u5176\u4ed6\u5bf9\u8c61\u4ea4\u4e92\"\"\"\n        if self.withdraw(amount):\n            target_account.deposit(amount)\n            self._record_transaction(f\"\u8f6c\u8d26\u7ed9{target_account.owner}\", amount)\n            target_account._record_transaction(f\"\u6536\u5230{self.owner}\u8f6c\u8d26\", amount)\n            return True\n        return False\n\n    # \u79c1\u6709\u65b9\u6cd5\uff1a\u5185\u90e8\u72b6\u6001\u7ba1\u7406\n    def _record_transaction(self, transaction_type: str, amount: float):\n        \"\"\"\u8bb0\u5f55\u4ea4\u6613\uff1a\u5185\u90e8\u72b6\u6001\u7ba1\u7406\"\"\"\n        import datetime\n        transaction = {\n            'type': transaction_type,\n            'amount': amount,\n            'balance': self._balance,\n            'time': datetime.datetime.now()\n        }\n        self._transaction_history.append(transaction)\n\n    def _update_credit_score(self, increment: float):\n        \"\"\"\u66f4\u65b0\u4fe1\u7528\u5206\uff1a\u5185\u90e8\u72b6\u6001\u53d8\u5316\"\"\"\n        # \u5728\u5b9e\u9645\u7cfb\u7edf\u4e2d\uff0c\u8fd9\u91cc\u4f1a\u6709\u590d\u6742\u7684\u4fe1\u7528\u5206\u8ba1\u7b97\u903b\u8f91\n        pass\n\n    # \u67e5\u8be2\u65b9\u6cd5\uff1a\u4e0d\u6539\u53d8\u72b6\u6001\uff0c\u8fd4\u56de\u4fe1\u606f\n    def get_balance(self) -&gt; float:\n        \"\"\"\u83b7\u53d6\u4f59\u989d\uff1a\u67e5\u8be2\u5bf9\u8c61\u72b6\u6001\"\"\"\n        return self._balance\n\n    def get_statement(self, days: int = 30):\n        \"\"\"\u83b7\u53d6\u5bf9\u8d26\u5355\uff1a\u8fd4\u56de\u5bf9\u8c61\u72b6\u6001\"\"\"\n        import datetime\n        cutoff = datetime.datetime.now() - datetime.timedelta(days=days)\n\n        statement = f\"{self.owner}\u7684\u5bf9\u8d26\u5355:\\n\"\n        statement += f\"\u8d26\u6237\u7c7b\u578b: {self.account_type}\\n\"\n        statement += f\"\u5f53\u524d\u4f59\u989d: {self._balance}\\n\"\n        statement += f\"\u8fd1\u671f\u4ea4\u6613({days}\u5929\u5185):\\n\"\n\n        for transaction in self._transaction_history:\n            if transaction&#91;'time'] &gt; cutoff:\n                statement += (f\"  {transaction&#91;'time'].strftime('%Y-%m-%d %H:%M')}: \"\n                             f\"{transaction&#91;'type']} {transaction&#91;'amount']} \"\n                             f\"(\u4f59\u989d: {transaction&#91;'balance']})\\n\")\n\n        return statement\n\n    def __str__(self):\n        \"\"\"\u5bf9\u8c61\u5b57\u7b26\u4e32\u8868\u793a\uff1a\u81ea\u6211\u63cf\u8ff0\"\"\"\n        return f\"BankAccount(owner={self.owner}, balance={self._balance})\"\n\nprint(\"=== \u5b9e\u4f8b\u65b9\u6cd5\u7684\u884c\u4e3a\u80fd\u529b\u6f14\u793a ===\")\n\n# \u521b\u5efa\u8d26\u6237\naccount1 = BankAccount(\"\u5f20\u4e09\", \"\u50a8\u84c4\u8d26\u6237\")\naccount2 = BankAccount(\"\u674e\u56db\", \"\u652f\u7968\u8d26\u6237\")\n\n# \u64cd\u4f5c\u8d26\u6237\naccount1.deposit(1000)\naccount1.withdraw(200)\naccount1.transfer(account2, 300)\n\naccount2.deposit(500)\naccount2.withdraw(100)\n\n# \u67e5\u8be2\u72b6\u6001\nprint(account1.get_statement())\nprint(account2.get_statement())\n\n# \u663e\u793a\u5bf9\u8c61\u72b6\u6001\nprint(f\"\\n\u8d26\u62371: {account1}\")\nprint(f\"\u8d26\u62372: {account2}\")<\/code><\/pre>\n\n\n\n<h2 class=\"wp-block-heading\">\u7b2c\u4e8c\u90e8\u5206\uff1a\u9759\u6001\u6210\u5458 &#8211; \u7c7b\u7684\u5171\u4eab\u7ef4\u5ea6<\/h2>\n\n\n\n<h3 class=\"wp-block-heading\">2.1 \u7c7b\u53d8\u91cf\uff1a\u7c7b\u7684\u5171\u4eab\u72b6\u6001<\/h3>\n\n\n\n<p>\u7c7b\u53d8\u91cf\u5c5e\u4e8e\u7c7b\u672c\u8eab\uff0c\u88ab\u6240\u6709\u5b9e\u4f8b\u5171\u4eab\u3002\u5b83\u4ee3\u8868\u4e86\u7c7b\u7684<strong>\u5168\u5c40\u72b6\u6001<\/strong>\u6216<strong>\u7c7b\u7ea7\u522b\u4fe1\u606f<\/strong>\u3002<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code># ============================================================================\n# \u7c7b\u53d8\u91cf\uff1a\u7c7b\u7684\u5171\u4eab\u72b6\u6001\n# ============================================================================\n\nclass Galaxy:\n    \"\"\"\u94f6\u6cb3\u7cfb\uff1a\u5c55\u793a\u7c7b\u53d8\u91cf\u7684\u5171\u4eab\u6027\"\"\"\n\n    # \u7c7b\u53d8\u91cf\uff1a\u5b9a\u4e49\u7c7b\u7684\u7279\u5f81\n    NAME = \"\u94f6\u6cb3\u7cfb\"\n    TYPE = \"\u68d2\u65cb\u661f\u7cfb\"\n    AGE_BILLION_YEARS = 13.51  # \u5e74\u9f84\uff08\u5341\u4ebf\u5e74\uff09\n\n    # \u7c7b\u53d8\u91cf\uff1a\u8ddf\u8e2a\u7c7b\u72b6\u6001\n    planet_count = 0  # \u884c\u661f\u8ba1\u6570\n    discovered_planets = &#91;]  # \u5df2\u53d1\u73b0\u884c\u661f\u5217\u8868\n\n    def __init__(self, planet_name: str, planet_type: str):\n        # \u5b9e\u4f8b\u53d8\u91cf\uff1a\u884c\u661f\u7279\u5f81\n        self.name = planet_name\n        self.type = planet_type\n        self.distance_from_earth = None  # \u5230\u5730\u7403\u7684\u8ddd\u79bb\n\n        # \u4fee\u6539\u7c7b\u53d8\u91cf\n        Galaxy.planet_count += 1\n        Galaxy.discovered_planets.append({\n            'id': Galaxy.planet_count,\n            'name': planet_name,\n            'type': planet_type,\n            'discovery_date': self._get_current_date()\n        })\n\n    @staticmethod\n    def _get_current_date():\n        \"\"\"\u83b7\u53d6\u5f53\u524d\u65e5\u671f\"\"\"\n        import datetime\n        return datetime.datetime.now().strftime(\"%Y-%m-%d\")\n\n    @classmethod\n    def get_galaxy_info(cls):\n        \"\"\"\u83b7\u53d6\u94f6\u6cb3\u7cfb\u4fe1\u606f\uff08\u7c7b\u65b9\u6cd5\uff09\"\"\"\n        info = f\"{cls.NAME} - {cls.TYPE}\\n\"\n        info += f\"\u5e74\u9f84: {cls.AGE_BILLION_YEARS} \u5341\u4ebf\u5e74\\n\"\n        info += f\"\u5df2\u53d1\u73b0\u884c\u661f: {cls.planet_count}\\n\"\n        return info\n\n    @classmethod\n    def list_discovered_planets(cls):\n        \"\"\"\u5217\u51fa\u5df2\u53d1\u73b0\u884c\u661f\uff08\u7c7b\u65b9\u6cd5\uff09\"\"\"\n        if not cls.discovered_planets:\n            return \"\u5c1a\u672a\u53d1\u73b0\u4efb\u4f55\u884c\u661f\"\n\n        listing = f\"{cls.NAME}\u4e2d\u5df2\u53d1\u73b0\u7684\u884c\u661f:\\n\"\n        for planet in cls.discovered_planets:\n            listing += (f\"  \u884c\u661f{planet&#91;'id']}: {planet&#91;'name']} \"\n                       f\"({planet&#91;'type']}) - \"\n                       f\"\u53d1\u73b0\u4e8e {planet&#91;'discovery_date']}\\n\")\n        return listing\n\n    @classmethod\n    def reset_discovery(cls):\n        \"\"\"\u91cd\u7f6e\u53d1\u73b0\u8bb0\u5f55\uff08\u7c7b\u65b9\u6cd5\uff09\"\"\"\n        print(f\"\u6b63\u5728\u91cd\u7f6e{cls.NAME}\u7684\u53d1\u73b0\u8bb0\u5f55...\")\n        original_count = cls.planet_count\n        cls.planet_count = 0\n        cls.discovered_planets.clear()\n        return original_count\n\nprint(\"=== \u7c7b\u53d8\u91cf\u7684\u5171\u4eab\u6027\u6f14\u793a ===\")\n\n# \u663e\u793a\u94f6\u6cb3\u7cfb\u57fa\u672c\u4fe1\u606f\uff08\u4e0d\u521b\u5efa\u5b9e\u4f8b\u5373\u53ef\u8bbf\u95ee\uff09\nprint(\"1. \u94f6\u6cb3\u7cfb\u57fa\u672c\u4fe1\u606f:\")\nprint(Galaxy.get_galaxy_info())\n\n# \u521b\u5efa\u884c\u661f\u5b9e\u4f8b\nprint(\"\\n2. \u53d1\u73b0\u65b0\u884c\u661f:\")\nearth = Galaxy(\"\u5730\u7403\", \"\u7c7b\u5730\u884c\u661f\")\nmars = Galaxy(\"\u706b\u661f\", \"\u7c7b\u5730\u884c\u661f\")\njupiter = Galaxy(\"\u6728\u661f\", \"\u6c14\u6001\u5de8\u884c\u661f\")\n\n# \u6240\u6709\u5b9e\u4f8b\u5171\u4eab\u76f8\u540c\u7684\u7c7b\u53d8\u91cf\nprint(f\"\u901a\u8fc7\u7c7b\u8bbf\u95ee\u884c\u661f\u8ba1\u6570: {Galaxy.planet_count}\")\nprint(f\"\u901a\u8fc7\u5730\u7403\u5b9e\u4f8b\u8bbf\u95ee: {earth.planet_count}\")\nprint(f\"\u901a\u8fc7\u706b\u661f\u5b9e\u4f8b\u8bbf\u95ee: {mars.planet_count}\")\n\nprint(\"\\n3. \u5df2\u53d1\u73b0\u884c\u661f\u5217\u8868:\")\nprint(Galaxy.list_discovered_planets())\n\n# \u4fee\u6539\u7c7b\u53d8\u91cf\u5f71\u54cd\u6240\u6709\u5b9e\u4f8b\nprint(\"\\n4. \u4fee\u6539\u7c7b\u53d8\u91cf:\")\nsaturn = Galaxy(\"\u571f\u661f\", \"\u6c14\u6001\u5de8\u884c\u661f\")\nprint(f\"\u521b\u5efa\u571f\u661f\u540e\uff0c\u5730\u7403\u5b9e\u4f8b\u770b\u5230\u8ba1\u6570: {earth.planet_count}\")\n\n# \u91cd\u7f6e\u53d1\u73b0\u8bb0\u5f55\nprint(\"\\n5. \u91cd\u7f6e\u53d1\u73b0\u8bb0\u5f55:\")\noriginal_count = Galaxy.reset_discovery()\nprint(f\"\u91cd\u7f6e\u4e86 {original_count} \u6761\u8bb0\u5f55\")\nprint(f\"\u91cd\u7f6e\u540e\u8ba1\u6570: {Galaxy.planet_count}\")\n\n# \u521b\u5efa\u65b0\u884c\u661f\nprint(\"\\n6. \u91cd\u65b0\u5f00\u59cb\u53d1\u73b0:\")\nkepler186f = Galaxy(\"\u5f00\u666e\u52d2186f\", \"\u7c7b\u5730\u884c\u661f\")\nprint(f\"\u65b0\u884c\u661f\u8ba1\u6570: {kepler186f.planet_count}\")\nprint(Galaxy.list_discovered_planets())<\/code><\/pre>\n\n\n\n<h3 class=\"wp-block-heading\">2.2 \u7c7b\u65b9\u6cd5\uff1a\u7c7b\u7684\u884c\u4e3a<\/h3>\n\n\n\n<p>\u7c7b\u65b9\u6cd5\u662f\u64cd\u4f5c\u7c7b\u7ea7\u522b\u72b6\u6001\u548c\u884c\u4e3a\u7684\u65b9\u6cd5\u3002\u5b83\u4eec\u901a\u5e38\u7528\u4e8e\uff1a<\/p>\n\n\n\n<ol class=\"wp-block-list\">\n<li>\u5de5\u5382\u65b9\u6cd5\uff1a\u521b\u5efa\u7279\u5b9a\u7c7b\u578b\u7684\u5b9e\u4f8b<\/li>\n\n\n\n<li>\u7c7b\u72b6\u6001\u7ba1\u7406\uff1a\u4fee\u6539\u7c7b\u53d8\u91cf<\/li>\n\n\n\n<li>\u66ff\u4ee3\u6784\u9020\u51fd\u6570\uff1a\u63d0\u4f9b\u4e0d\u540c\u7684\u5b9e\u4f8b\u5316\u65b9\u5f0f<\/li>\n<\/ol>\n\n\n\n<pre class=\"wp-block-code\"><code># ============================================================================\n# \u7c7b\u65b9\u6cd5\uff1a\u7c7b\u7684\u884c\u4e3a\u4e0e\u5de5\u5382\u6a21\u5f0f\n# ============================================================================\n\nclass Document:\n    \"\"\"\u6587\u6863\u7c7b\uff1a\u5c55\u793a\u7c7b\u65b9\u6cd5\u7684\u5404\u79cd\u7528\u9014\"\"\"\n\n    # \u7c7b\u53d8\u91cf\n    document_count = 0\n    total_pages = 0\n\n    def __init__(self, title: str, content: str = \"\"):\n        # \u5b9e\u4f8b\u53d8\u91cf\n        self.title = title\n        self.content = content\n        self.pages = self._calculate_pages()\n\n        # \u66f4\u65b0\u7c7b\u53d8\u91cf\n        Document.document_count += 1\n        Document.total_pages += self.pages\n\n    def _calculate_pages(self) -&gt; int:\n        \"\"\"\u8ba1\u7b97\u9875\u6570\uff08\u5047\u8bbe\u6bcf\u9875500\u5b57\u7b26\uff09\"\"\"\n        return max(1, len(self.content) \/\/ 500 + 1)\n\n    def add_content(self, new_content: str):\n        \"\"\"\u6dfb\u52a0\u5185\u5bb9\uff1a\u6539\u53d8\u5b9e\u4f8b\u72b6\u6001\"\"\"\n        self.content += new_content\n\n        # \u66f4\u65b0\u9875\u6570\n        old_pages = self.pages\n        self.pages = self._calculate_pages()\n\n        # \u66f4\u65b0\u7c7b\u53d8\u91cf\n        Document.total_pages += (self.pages - old_pages)\n\n    @classmethod\n    def get_statistics(cls) -&gt; dict:\n        \"\"\"\u83b7\u53d6\u6587\u6863\u7edf\u8ba1\u4fe1\u606f\uff08\u7c7b\u65b9\u6cd5\uff09\"\"\"\n        return {\n            'document_count': cls.document_count,\n            'total_pages': cls.total_pages,\n            'average_pages': (cls.total_pages \/ cls.document_count \n                            if cls.document_count &gt; 0 else 0)\n        }\n\n    @classmethod\n    def create_from_file(cls, filepath: str) -&gt; 'Document':\n        \"\"\"\u4ece\u6587\u4ef6\u521b\u5efa\u6587\u6863\uff08\u5de5\u5382\u65b9\u6cd5\uff09\"\"\"\n        try:\n            with open(filepath, 'r', encoding='utf-8') as f:\n                content = f.read()\n\n            import os\n            title = os.path.basename(filepath)\n            return cls(title, content)\n        except FileNotFoundError:\n            print(f\"\u6587\u4ef6\u4e0d\u5b58\u5728: {filepath}\")\n            return cls(\"\u7a7a\u6587\u6863\")\n\n    @classmethod\n    def create_empty(cls, title: str) -&gt; 'Document':\n        \"\"\"\u521b\u5efa\u7a7a\u6587\u6863\uff08\u5de5\u5382\u65b9\u6cd5\uff09\"\"\"\n        return cls(title)\n\n    @classmethod\n    def create_from_template(cls, template_name: str, **kwargs) -&gt; 'Document':\n        \"\"\"\u4ece\u6a21\u677f\u521b\u5efa\u6587\u6863\uff08\u5de5\u5382\u65b9\u6cd5\uff09\"\"\"\n        templates = {\n            'letter': \"\u5c0a\u656c\u7684{recipient}:\\n\\n{body}\\n\\n\u6b64\u81f4\\n\u656c\u793c\\n{sender}\",\n            'report': \"\u62a5\u544a\u6807\u9898: {title}\\n\\n\u6458\u8981: {summary}\\n\\n\u6b63\u6587:\\n{content}\",\n            'memo': \"\u5907\u5fd8\u5f55\\n\u53d1\u81f3: {to}\\n\u53d1\u81ea: {from_}\\n\u4e3b\u9898: {subject}\\n\\n\u5185\u5bb9: {body}\"\n        }\n\n        if template_name in templates:\n            content = templates&#91;template_name].format(**kwargs)\n            title = f\"{template_name}_{kwargs.get('title', '')}\"\n            return cls(title, content)\n        else:\n            return cls(f\"{template_name}_\u6a21\u677f\", \"\u6a21\u677f\u4e0d\u5b58\u5728\")\n\n    @classmethod\n    def merge_documents(cls, *documents: 'Document') -&gt; 'Document':\n        \"\"\"\u5408\u5e76\u591a\u4e2a\u6587\u6863\uff08\u7c7b\u65b9\u6cd5\uff09\"\"\"\n        if not documents:\n            return cls(\"\u7a7a\u6587\u6863\")\n\n        titles = &#91;doc.title for doc in documents]\n        combined_content = \"\\n\\n\".join(doc.content for doc in documents)\n\n        new_title = f\"\u5408\u5e76\u6587\u6863_{'_'.join(titles&#91;:3])}\"\n        if len(titles) &gt; 3:\n            new_title += f\"_\u7b49{len(documents)}\u4e2a\u6587\u6863\"\n\n        return cls(new_title, combined_content)\n\nprint(\"=== \u7c7b\u65b9\u6cd5\u7684\u591a\u7528\u9014\u6f14\u793a ===\")\n\n# 1. \u4f7f\u7528\u5de5\u5382\u65b9\u6cd5\u521b\u5efa\u6587\u6863\nprint(\"1. \u4f7f\u7528\u4e0d\u540c\u7684\u5de5\u5382\u65b9\u6cd5\u521b\u5efa\u6587\u6863:\")\n\n# \u521b\u5efa\u7a7a\u6587\u6863\ndoc1 = Document.create_empty(\"\u9879\u76ee\u8ba1\u5212\")\ndoc1.add_content(\"\u8fd9\u662f\u9879\u76ee\u8ba1\u5212\u7684\u7b2c\u4e00\u90e8\u5206\u3002\")\nprint(f\"\u6587\u68631: {doc1.title}, \u9875\u6570: {doc1.pages}\")\n\n# \u4ece\u6a21\u677f\u521b\u5efa\ndoc2 = Document.create_from_template(\n    'letter',\n    recipient=\"\u5f20\u7ecf\u7406\",\n    body=\"\u5173\u4e8e\u9879\u76ee\u8fdb\u5ea6\u7684\u6c47\u62a5\",\n    sender=\"\u738b\u52a9\u7406\"\n)\nprint(f\"\u6587\u68632: {doc2.title}, \u9875\u6570: {doc2.pages}\")\n\n# \u4ece\u6a21\u677f\u521b\u5efa\u62a5\u544a\ndoc3 = Document.create_from_template(\n    'report',\n    title=\"\u5b63\u5ea6\u62a5\u544a\",\n    summary=\"\u672c\u5b63\u5ea6\u4e1a\u7ee9\u826f\u597d\",\n    content=\"\u8be6\u7ec6\u5185\u5bb9...\"\n)\nprint(f\"\u6587\u68633: {doc3.title}, \u9875\u6570: {doc3.pages}\")\n\n# 2. \u83b7\u53d6\u7edf\u8ba1\u4fe1\u606f\nprint(f\"\\n2. \u6587\u6863\u7edf\u8ba1:\")\nstats = Document.get_statistics()\nfor key, value in stats.items():\n    print(f\"  {key}: {value}\")\n\n# 3. \u5408\u5e76\u6587\u6863\nprint(\"\\n3. \u5408\u5e76\u6587\u6863:\")\nmerged = Document.merge_documents(doc1, doc2, doc3)\nprint(f\"\u5408\u5e76\u540e\u6587\u6863: {merged.title}\")\nprint(f\"\u5408\u5e76\u540e\u9875\u6570: {merged.pages}\")\n\n# 4. \u66f4\u65b0\u7edf\u8ba1\u4fe1\u606f\nprint(f\"\\n4. \u66f4\u65b0\u540e\u7edf\u8ba1:\")\nstats = Document.get_statistics()\nfor key, value in stats.items():\n    print(f\"  {key}: {value}\")\n\n# 5. \u5c1d\u8bd5\u4ece\u6587\u4ef6\u521b\u5efa\uff08\u9700\u8981\u5b9e\u9645\u6587\u4ef6\uff09\nprint(\"\\n5. \u5c1d\u8bd5\u4ece\u6587\u4ef6\u521b\u5efa:\")\ntry:\n    # \u5728\u5b9e\u9645\u73af\u5883\u4e2d\uff0c\u8fd9\u91cc\u53ef\u4ee5\u6307\u5b9a\u771f\u5b9e\u6587\u4ef6\u8def\u5f84\n    # file_doc = Document.create_from_file(\"example.txt\")\n    print(\"\u6587\u4ef6\u521b\u5efa\u529f\u80fd\u5c31\u7eea\uff08\u9700\u8981\u5b9e\u9645\u6587\u4ef6\u8def\u5f84\uff09\")\nexcept Exception as e:\n    print(f\"\u6587\u4ef6\u521b\u5efa\u793a\u4f8b: {e}\")<\/code><\/pre>\n\n\n\n<h3 class=\"wp-block-heading\">2.3 \u9759\u6001\u65b9\u6cd5\uff1a\u5de5\u5177\u51fd\u6570\u4e0e\u7c7b\u547d\u540d\u7a7a\u95f4<\/h3>\n\n\n\n<p>\u9759\u6001\u65b9\u6cd5\u662f\u4e0e\u7c7b\u76f8\u5173\u4f46\u4e0d\u9700\u8981\u8bbf\u95ee\u7c7b\u6216\u5b9e\u4f8b\u72b6\u6001\u7684\u51fd\u6570\u3002\u5b83\u4eec\u5b58\u5728\u4e8e\u7c7b\u7684\u547d\u540d\u7a7a\u95f4\u4e2d\uff0c\u63d0\u4f9b\u4e86\u66f4\u597d\u7684\u7ec4\u7ec7\u6027\u3002<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code># ============================================================================\n# \u9759\u6001\u65b9\u6cd5\uff1a\u5de5\u5177\u51fd\u6570\u4e0e\u7c7b\u7684\u547d\u540d\u7a7a\u95f4\u7ec4\u7ec7\n# ============================================================================\n\nclass Geometry:\n    \"\"\"\u51e0\u4f55\u5de5\u5177\u7c7b\uff1a\u5c55\u793a\u9759\u6001\u65b9\u6cd5\u7684\u7ec4\u7ec7\u4f5c\u7528\"\"\"\n\n    @staticmethod\n    def circle_area(radius: float) -&gt; float:\n        \"\"\"\u8ba1\u7b97\u5706\u9762\u79ef\"\"\"\n        import math\n        return math.pi * radius ** 2\n\n    @staticmethod\n    def circle_circumference(radius: float) -&gt; float:\n        \"\"\"\u8ba1\u7b97\u5706\u5468\u957f\"\"\"\n        import math\n        return 2 * math.pi * radius\n\n    @staticmethod\n    def rectangle_area(length: float, width: float) -&gt; float:\n        \"\"\"\u8ba1\u7b97\u77e9\u5f62\u9762\u79ef\"\"\"\n        return length * width\n\n    @staticmethod\n    def rectangle_perimeter(length: float, width: float) -&gt; float:\n        \"\"\"\u8ba1\u7b97\u77e9\u5f62\u5468\u957f\"\"\"\n        return 2 * (length + width)\n\n    @staticmethod\n    def triangle_area(base: float, height: float) -&gt; float:\n        \"\"\"\u8ba1\u7b97\u4e09\u89d2\u5f62\u9762\u79ef\"\"\"\n        return 0.5 * base * height\n\n    @staticmethod\n    def triangle_type(side1: float, side2: float, side3: float) -&gt; str:\n        \"\"\"\u5224\u65ad\u4e09\u89d2\u5f62\u7c7b\u578b\"\"\"\n        # \u6392\u5e8f\u8fb9\n        sides = sorted(&#91;side1, side2, side3])\n\n        # \u68c0\u67e5\u662f\u5426\u80fd\u6784\u6210\u4e09\u89d2\u5f62\n        if sides&#91;0] + sides&#91;1] &lt;= sides&#91;2]:\n            return \"\u4e0d\u80fd\u6784\u6210\u4e09\u89d2\u5f62\"\n\n        # \u5224\u65ad\u7c7b\u578b\n        if sides&#91;0] == sides&#91;1] == sides&#91;2]:\n            return \"\u7b49\u8fb9\u4e09\u89d2\u5f62\"\n        elif sides&#91;0] == sides&#91;1] or sides&#91;1] == sides&#91;2]:\n            return \"\u7b49\u8170\u4e09\u89d2\u5f62\"\n        elif sides&#91;0]**2 + sides&#91;1]**2 == sides&#91;2]**2:\n            return \"\u76f4\u89d2\u4e09\u89d2\u5f62\"\n        else:\n            return \"\u4e00\u822c\u4e09\u89d2\u5f62\"\n\n    @staticmethod\n    def distance(point1: tuple, point2: tuple) -&gt; float:\n        \"\"\"\u8ba1\u7b97\u4e24\u70b9\u95f4\u8ddd\u79bb\"\"\"\n        import math\n        x1, y1 = point1\n        x2, y2 = point2\n        return math.sqrt((x2 - x1)**2 + (y2 - y1)**2)\n\n    @staticmethod\n    def is_point_in_circle(point: tuple, center: tuple, radius: float) -&gt; bool:\n        \"\"\"\u5224\u65ad\u70b9\u662f\u5426\u5728\u5706\u5185\"\"\"\n        distance = Geometry.distance(point, center)\n        return distance &lt;= radius\n\nclass StringUtils:\n    \"\"\"\u5b57\u7b26\u4e32\u5de5\u5177\u7c7b\uff1a\u5c55\u793a\u9759\u6001\u65b9\u6cd5\u7684\u5b9e\u7528\u4ef7\u503c\"\"\"\n\n    @staticmethod\n    def is_palindrome(text: str) -&gt; bool:\n        \"\"\"\u5224\u65ad\u662f\u5426\u4e3a\u56de\u6587\"\"\"\n        cleaned = ''.join(char.lower() for char in text if char.isalnum())\n        return cleaned == cleaned&#91;::-1]\n\n    @staticmethod\n    def count_words(text: str) -&gt; int:\n        \"\"\"\u7edf\u8ba1\u5355\u8bcd\u6570\"\"\"\n        words = text.split()\n        return len(words)\n\n    @staticmethod\n    def reverse_words(text: str) -&gt; str:\n        \"\"\"\u53cd\u8f6c\u5355\u8bcd\u987a\u5e8f\"\"\"\n        words = text.split()\n        return ' '.join(reversed(words))\n\n    @staticmethod\n    def to_title_case(text: str) -&gt; str:\n        \"\"\"\u8f6c\u6362\u4e3a\u6807\u9898\u5927\u5c0f\u5199\"\"\"\n        return ' '.join(word.capitalize() for word in text.split())\n\n    @staticmethod\n    def remove_duplicate_words(text: str) -&gt; str:\n        \"\"\"\u79fb\u9664\u91cd\u590d\u5355\u8bcd\"\"\"\n        words = text.split()\n        unique_words = &#91;]\n        seen = set()\n\n        for word in words:\n            if word not in seen:\n                seen.add(word)\n                unique_words.append(word)\n\n        return ' '.join(unique_words)\n\n    @staticmethod\n    def levenshtein_distance(s1: str, s2: str) -&gt; int:\n        \"\"\"\u8ba1\u7b97\u83b1\u6587\u65af\u5766\u8ddd\u79bb\uff08\u7f16\u8f91\u8ddd\u79bb\uff09\"\"\"\n        if len(s1) &lt; len(s2):\n            return StringUtils.levenshtein_distance(s2, s1)\n\n        if len(s2) == 0:\n            return len(s1)\n\n        previous_row = range(len(s2) + 1)\n\n        for i, c1 in enumerate(s1):\n            current_row = &#91;i + 1]\n\n            for j, c2 in enumerate(s2):\n                # \u8ba1\u7b97\u63d2\u5165\u3001\u5220\u9664\u3001\u66ff\u6362\u7684\u4ee3\u4ef7\n                insertions = previous_row&#91;j + 1] + 1\n                deletions = current_row&#91;j] + 1\n                substitutions = previous_row&#91;j] + (c1 != c2)\n\n                current_row.append(min(insertions, deletions, substitutions))\n\n            previous_row = current_row\n\n        return previous_row&#91;-1]\n\nprint(\"=== \u9759\u6001\u65b9\u6cd5\u7684\u5de5\u5177\u6027\u6f14\u793a ===\")\n\nprint(\"1. \u51e0\u4f55\u8ba1\u7b97:\")\nradius = 5\nprint(f\"\u534a\u5f84 {radius} \u7684\u5706:\")\nprint(f\"  \u9762\u79ef: {Geometry.circle_area(radius):.2f}\")\nprint(f\"  \u5468\u957f: {Geometry.circle_circumference(radius):.2f}\")\n\npoints = &#91;(0, 0), (3, 4)]\nprint(f\"\\n\u4e24\u70b9 {points&#91;0]} \u548c {points&#91;1]} \u7684\u8ddd\u79bb:\")\nprint(f\"  \u8ddd\u79bb: {Geometry.distance(points&#91;0], points&#91;1]):.2f}\")\n\ntriangle_sides = (3, 4, 5)\nprint(f\"\\n\u8fb9\u957f {triangle_sides} \u7684\u4e09\u89d2\u5f62:\")\nprint(f\"  \u7c7b\u578b: {Geometry.triangle_type(*triangle_sides)}\")\n\nprint(\"\\n2. \u5b57\u7b26\u4e32\u5904\u7406:\")\ntest_text = \"hello world this is a test\"\nprint(f\"\u539f\u59cb\u6587\u672c: '{test_text}'\")\nprint(f\"\u5355\u8bcd\u6570: {StringUtils.count_words(test_text)}\")\nprint(f\"\u53cd\u8f6c\u5355\u8bcd: '{StringUtils.reverse_words(test_text)}'\")\nprint(f\"\u6807\u9898\u5927\u5c0f\u5199: '{StringUtils.to_title_case(test_text)}'\")\n\npalindrome_text = \"A man a plan a canal Panama\"\nprint(f\"\\n\u56de\u6587\u68c0\u6d4b: '{palindrome_text}'\")\nprint(f\"\u662f\u56de\u6587\u5417? {StringUtils.is_palindrome(palindrome_text)}\")\n\nduplicate_text = \"hello hello world world test test\"\nprint(f\"\\n\u53bb\u91cd\u524d: '{duplicate_text}'\")\nprint(f\"\u53bb\u91cd\u540e: '{StringUtils.remove_duplicate_words(duplicate_text)}'\")\n\nprint(\"\\n3. \u7f16\u8f91\u8ddd\u79bb\u8ba1\u7b97:\")\ns1 = \"kitten\"\ns2 = \"sitting\"\ndistance = StringUtils.levenshtein_distance(s1, s2)\nprint(f\"'{s1}' \u5230 '{s2}' \u7684\u7f16\u8f91\u8ddd\u79bb: {distance}\")\nprint(f\"\u9700\u8981 {distance} \u6b21\u64cd\u4f5c\u6765\u8f6c\u6362:\")\nprint(\"  kitten -&gt; sitten (\u66ff\u6362k\u4e3as)\")\nprint(\"  sitten -&gt; sittin (\u66ff\u6362e\u4e3ai)\")\nprint(\"  sittin -&gt; sitting (\u5728\u672b\u5c3e\u6dfb\u52a0g)\")<\/code><\/pre>\n\n\n\n<h2 class=\"wp-block-heading\">\u7b2c\u4e09\u90e8\u5206\uff1a\u6df1\u5165\u5bf9\u6bd4\u4e0e\u8bbe\u8ba1\u539f\u5219<\/h2>\n\n\n\n<h3 class=\"wp-block-heading\">3.1 \u4e09\u79cd\u65b9\u6cd5\u7684\u672c\u8d28\u533a\u522b<\/h3>\n\n\n\n<figure class=\"wp-block-table\"><table class=\"has-fixed-layout\"><thead><tr><th>\u7ef4\u5ea6<\/th><th>\u5b9e\u4f8b\u65b9\u6cd5<\/th><th>\u7c7b\u65b9\u6cd5<\/th><th>\u9759\u6001\u65b9\u6cd5<\/th><\/tr><\/thead><tbody><tr><td><strong>\u7ed1\u5b9a\u5bf9\u8c61<\/strong><\/td><td>\u5b9e\u4f8b<\/td><td>\u7c7b<\/td><td>\u65e0\u7ed1\u5b9a<\/td><\/tr><tr><td><strong>\u7b2c\u4e00\u4e2a\u53c2\u6570<\/strong><\/td><td><code>self<\/code> (\u5b9e\u4f8b\u5f15\u7528)<\/td><td><code>cls<\/code> (\u7c7b\u5f15\u7528)<\/td><td>\u65e0\u7279\u6b8a\u53c2\u6570<\/td><\/tr><tr><td><strong>\u8bbf\u95ee\u6743\u9650<\/strong><\/td><td>\u5b9e\u4f8b\u53d8\u91cf + \u7c7b\u53d8\u91cf<\/td><td>\u7c7b\u53d8\u91cf<\/td><td>\u65e0\u8bbf\u95ee\u6743\u9650<\/td><\/tr><tr><td><strong>\u7ee7\u627f\u884c\u4e3a<\/strong><\/td><td>\u53ef\u88ab\u8986\u76d6<\/td><td>\u901a\u8fc7<code>cls<\/code>\u77e5\u9053\u5f53\u524d\u7c7b<\/td><td>\u5982\u540c\u666e\u901a\u51fd\u6570<\/td><\/tr><tr><td><strong>\u5178\u578b\u7528\u9014<\/strong><\/td><td>\u64cd\u4f5c\u5b9e\u4f8b\u72b6\u6001<\/td><td>\u64cd\u4f5c\u7c7b\u72b6\u6001\u3001\u5de5\u5382\u65b9\u6cd5<\/td><td>\u5de5\u5177\u51fd\u6570<\/td><\/tr><\/tbody><\/table><\/figure>\n\n\n\n<h3 class=\"wp-block-heading\">3.2 \u4f55\u65f6\u4f7f\u7528\u4f55\u79cd\u65b9\u6cd5\uff1f\u8bbe\u8ba1\u51b3\u7b56\u6307\u5357<\/h3>\n\n\n\n<pre class=\"wp-block-code\"><code># ============================================================================\n# \u8bbe\u8ba1\u51b3\u7b56\uff1a\u4f55\u65f6\u4f7f\u7528\u4f55\u79cd\u65b9\u6cd5\n# ============================================================================\n\nclass PaymentSystem:\n    \"\"\"\u652f\u4ed8\u7cfb\u7edf\uff1a\u5c55\u793a\u65b9\u6cd5\u9009\u62e9\u7684\u51b3\u7b56\u8fc7\u7a0b\"\"\"\n\n    # \u7c7b\u53d8\u91cf\uff1a\u7cfb\u7edf\u7ea7\u914d\u7f6e\n    transaction_fee_rate = 0.02  # \u4ea4\u6613\u8d39\u73872%\n    currency = \"CNY\"  # \u9ed8\u8ba4\u8d27\u5e01\n    supported_currencies = &#91;\"CNY\", \"USD\", \"EUR\"]\n\n    def __init__(self, user_id: str, balance: float = 0):\n        # \u5b9e\u4f8b\u53d8\u91cf\uff1a\u7528\u6237\u7ea7\u72b6\u6001\n        self.user_id = user_id\n        self._balance = balance\n        self.transaction_history = &#91;]\n\n    # \u5b9e\u4f8b\u65b9\u6cd5\uff1a\u64cd\u4f5c\u7528\u6237\u72b6\u6001\n    def deposit(self, amount: float):\n        \"\"\"\u5b58\u6b3e\uff1a\u64cd\u4f5c\u5b9e\u4f8b\u72b6\u6001\"\"\"\n        if amount &lt;= 0:\n            raise ValueError(\"\u5b58\u6b3e\u91d1\u989d\u5fc5\u987b\u5927\u4e8e0\")\n\n        self._balance += amount\n        self._record_transaction(\"\u5b58\u6b3e\", amount)\n        return self._balance\n\n    def withdraw(self, amount: float):\n        \"\"\"\u53d6\u6b3e\uff1a\u64cd\u4f5c\u5b9e\u4f8b\u72b6\u6001\"\"\"\n        if amount &lt;= 0:\n            raise ValueError(\"\u53d6\u6b3e\u91d1\u989d\u5fc5\u987b\u5927\u4e8e0\")\n\n        if amount &gt; self._balance:\n            raise ValueError(\"\u4f59\u989d\u4e0d\u8db3\")\n\n        # \u8ba1\u7b97\u624b\u7eed\u8d39\uff08\u4f7f\u7528\u9759\u6001\u65b9\u6cd5\uff09\n        fee = PaymentSystem.calculate_transaction_fee(amount)\n        total_deduction = amount + fee\n\n        self._balance -= total_deduction\n        self._record_transaction(\"\u53d6\u6b3e\", amount, fee)\n        return self._balance\n\n    def transfer(self, target: 'PaymentSystem', amount: float):\n        \"\"\"\u8f6c\u8d26\uff1a\u4e0e\u5176\u4ed6\u5b9e\u4f8b\u4ea4\u4e92\"\"\"\n        # \u9a8c\u8bc1\uff08\u4f7f\u7528\u7c7b\u65b9\u6cd5\uff09\n        if not PaymentSystem.validate_transfer_amount(amount):\n            raise ValueError(\"\u8f6c\u8d26\u91d1\u989d\u65e0\u6548\")\n\n        # \u64cd\u4f5c\u5b9e\u4f8b\u72b6\u6001\n        self.withdraw(amount)\n        target.deposit(amount)\n        self._record_transaction(f\"\u8f6c\u8d26\u7ed9{target.user_id}\", amount)\n        target._record_transaction(f\"\u6536\u5230{self.user_id}\u8f6c\u8d26\", amount)\n\n    def _record_transaction(self, transaction_type: str, amount: float, fee: float = 0):\n        \"\"\"\u8bb0\u5f55\u4ea4\u6613\uff1a\u5185\u90e8\u5b9e\u4f8b\u65b9\u6cd5\"\"\"\n        import datetime\n        transaction = {\n            'type': transaction_type,\n            'amount': amount,\n            'fee': fee,\n            'balance': self._balance,\n            'timestamp': datetime.datetime.now()\n        }\n        self.transaction_history.append(transaction)\n\n    # \u7c7b\u65b9\u6cd5\uff1a\u64cd\u4f5c\u7c7b\u72b6\u6001\n    @classmethod\n    def set_transaction_fee_rate(cls, new_rate: float):\n        \"\"\"\u8bbe\u7f6e\u4ea4\u6613\u8d39\u7387\uff1a\u64cd\u4f5c\u7c7b\u53d8\u91cf\"\"\"\n        if 0 &lt;= new_rate &lt;= 0.1:  # \u8d39\u7387\u57280-10%\u4e4b\u95f4\n            cls.transaction_fee_rate = new_rate\n            print(f\"\u4ea4\u6613\u8d39\u7387\u5df2\u66f4\u65b0\u4e3a: {new_rate*100}%\")\n        else:\n            raise ValueError(\"\u8d39\u7387\u5fc5\u987b\u57280-10%\u4e4b\u95f4\")\n\n    @classmethod\n    def add_supported_currency(cls, currency: str):\n        \"\"\"\u6dfb\u52a0\u652f\u6301\u8d27\u5e01\uff1a\u64cd\u4f5c\u7c7b\u53d8\u91cf\"\"\"\n        if currency not in cls.supported_currencies:\n            cls.supported_currencies.append(currency)\n            print(f\"\u5df2\u6dfb\u52a0\u652f\u6301\u8d27\u5e01: {currency}\")\n\n    @classmethod\n    def get_system_info(cls):\n        \"\"\"\u83b7\u53d6\u7cfb\u7edf\u4fe1\u606f\uff1a\u8fd4\u56de\u7c7b\u72b6\u6001\"\"\"\n        info = {\n            'transaction_fee_rate': cls.transaction_fee_rate,\n            'currency': cls.currency,\n            'supported_currencies': cls.supported_currencies,\n            'description': f\"\u652f\u4ed8\u7cfb\u7edfv1.0 (\u9ed8\u8ba4\u8d27\u5e01: {cls.currency})\"\n        }\n        return info\n\n    # \u9759\u6001\u65b9\u6cd5\uff1a\u5de5\u5177\u51fd\u6570\n    @staticmethod\n    def calculate_transaction_fee(amount: float) -&gt; float:\n        \"\"\"\u8ba1\u7b97\u4ea4\u6613\u8d39\uff1a\u7eaf\u8ba1\u7b97\u51fd\u6570\"\"\"\n        # \u53ef\u4ee5\u8bbf\u95ee\u7c7b\u53d8\u91cf\uff0c\u4f46\u901a\u8fc7\u7c7b\u540d\u800c\u975ecls\n        fee = amount * PaymentSystem.transaction_fee_rate\n        return round(fee, 2)\n\n    @staticmethod\n    def validate_transfer_amount(amount: float) -&gt; bool:\n        \"\"\"\u9a8c\u8bc1\u8f6c\u8d26\u91d1\u989d\uff1a\u9a8c\u8bc1\u903b\u8f91\"\"\"\n        return amount &gt; 0 and amount &lt;= 1000000  # \u4e0d\u8d85\u8fc7100\u4e07\n\n    @staticmethod\n    def format_currency(amount: float, currency: str = None) -&gt; str:\n        \"\"\"\u683c\u5f0f\u5316\u8d27\u5e01\u91d1\u989d\uff1a\u683c\u5f0f\u5316\u51fd\u6570\"\"\"\n        if currency is None:\n            currency = PaymentSystem.currency\n\n        currency_symbols = {\n            \"CNY\": \"\u00a5\",\n            \"USD\": \"$\",\n            \"EUR\": \"\u20ac\"\n        }\n\n        symbol = currency_symbols.get(currency, currency)\n        return f\"{symbol}{amount:,.2f}\"\n\n    # \u6df7\u5408\u4f7f\u7528\uff1a\u5b9e\u4f8b\u65b9\u6cd5\u4e2d\u4f7f\u7528\u7c7b\u65b9\u6cd5\u548c\u9759\u6001\u65b9\u6cd5\n    def get_account_statement(self):\n        \"\"\"\u83b7\u53d6\u8d26\u6237\u5bf9\u8d26\u5355\uff1a\u6df7\u5408\u4f7f\u7528\"\"\"\n        statement = f\"\u7528\u6237 {self.user_id} \u7684\u5bf9\u8d26\u5355\\n\"\n        statement += f\"\u5f53\u524d\u4f59\u989d: {PaymentSystem.format_currency(self._balance)}\\n\"\n\n        if self.transaction_history:\n            statement += \"\u6700\u8fd1\u4ea4\u6613:\\n\"\n            for transaction in self.transaction_history&#91;-5:]:  # \u6700\u8fd15\u7b14\n                formatted_amount = PaymentSystem.format_currency(transaction&#91;'amount'])\n                formatted_fee = PaymentSystem.format_currency(transaction&#91;'fee'])\n\n                statement += (f\"  {transaction&#91;'timestamp'].strftime('%Y-%m-%d %H:%M')}: \"\n                            f\"{transaction&#91;'type']} {formatted_amount}\")\n\n                if transaction&#91;'fee'] &gt; 0:\n                    statement += f\" (\u624b\u7eed\u8d39: {formatted_fee})\"\n\n                statement += f\" &#91;\u4f59\u989d: {PaymentSystem.format_currency(transaction&#91;'balance'])}]\\n\"\n\n        return statement\n\nprint(\"=== \u8bbe\u8ba1\u51b3\u7b56\u793a\u4f8b ===\")\n\n# 1. \u7cfb\u7edf\u914d\u7f6e\uff08\u7c7b\u65b9\u6cd5\uff09\nprint(\"1. \u7cfb\u7edf\u914d\u7f6e:\")\nprint(\"\u521d\u59cb\u7cfb\u7edf\u4fe1\u606f:\", PaymentSystem.get_system_info())\n\n# \u4fee\u6539\u7c7b\u53d8\u91cf\nPaymentSystem.set_transaction_fee_rate(0.015)  # 1.5%\nPaymentSystem.add_supported_currency(\"JPY\")\nprint(\"\u66f4\u65b0\u540e\u7cfb\u7edf\u4fe1\u606f:\", PaymentSystem.get_system_info())\n\nprint(\"\\n2. \u7528\u6237\u64cd\u4f5c\uff08\u5b9e\u4f8b\u65b9\u6cd5\uff09:\")\n\n# \u521b\u5efa\u7528\u6237\nalice = PaymentSystem(\"alice001\", 1000)\nbob = PaymentSystem(\"bob002\", 500)\n\n# \u5b9e\u4f8b\u64cd\u4f5c\nalice.deposit(500)\nalice.withdraw(200)\nalice.transfer(bob, 300)\n\nprint(\"\u7231\u4e3d\u4e1d\u8d26\u6237:\")\nprint(alice.get_account_statement())\n\nprint(\"\\n\u9c8d\u52c3\u8d26\u6237:\")\nprint(bob.get_account_statement())\n\nprint(\"\\n3. \u5de5\u5177\u51fd\u6570\uff08\u9759\u6001\u65b9\u6cd5\uff09:\")\namount = 1234.56\nprint(f\"\u683c\u5f0f\u5316\u91d1\u989d: {PaymentSystem.format_currency(amount)}\")\nprint(f\"\u683c\u5f0f\u5316\u7f8e\u5143: {PaymentSystem.format_currency(amount, 'USD')}\")\n\ntransaction_amount = 1000\nfee = PaymentSystem.calculate_transaction_fee(transaction_amount)\nprint(f\"\\n\u4ea4\u6613\u91d1\u989d {transaction_amount} \u7684\u624b\u7eed\u8d39: {fee}\")<\/code><\/pre>\n\n\n\n<h3 class=\"wp-block-heading\">3.3 \u7ee7\u627f\u4e2d\u7684\u884c\u4e3a\u5dee\u5f02<\/h3>\n\n\n\n<pre class=\"wp-block-code\"><code># ============================================================================\n# \u7ee7\u627f\u4e2d\u7684\u9759\u6001\u6210\u5458\u4e0e\u5b9e\u4f8b\u6210\u5458\n# ============================================================================\n\nclass Animal:\n    \"\"\"\u52a8\u7269\u57fa\u7c7b\uff1a\u5c55\u793a\u7ee7\u627f\u4e2d\u7684\u884c\u4e3a\"\"\"\n\n    # \u7c7b\u53d8\u91cf\n    kingdom = \"\u52a8\u7269\u754c\"\n    total_animals = 0\n\n    def __init__(self, name: str):\n        # \u5b9e\u4f8b\u53d8\u91cf\n        self.name = name\n        self.sound = \"...\"  # \u9ed8\u8ba4\u58f0\u97f3\n\n        # \u66f4\u65b0\u7c7b\u53d8\u91cf\n        Animal.total_animals += 1\n        self.id = Animal.total_animals\n\n    # \u5b9e\u4f8b\u65b9\u6cd5\uff1a\u53ef\u88ab\u5b50\u7c7b\u8986\u76d6\n    def speak(self):\n        \"\"\"\u52a8\u7269\u53d1\u58f0\"\"\"\n        return f\"{self.name}\u8bf4: {self.sound}\"\n\n    # \u7c7b\u65b9\u6cd5\uff1a\u901a\u8fc7cls\u77e5\u9053\u5f53\u524d\u7c7b\n    @classmethod\n    def get_kingdom(cls):\n        \"\"\"\u83b7\u53d6\u754c\u540d\"\"\"\n        return cls.kingdom\n\n    @classmethod\n    def create_anonymous(cls):\n        \"\"\"\u521b\u5efa\u533f\u540d\u52a8\u7269\uff08\u5de5\u5382\u65b9\u6cd5\uff09\"\"\"\n        return cls(f\"\u533f\u540d{cls.__name__}\")\n\n    # \u9759\u6001\u65b9\u6cd5\uff1a\u5982\u540c\u666e\u901a\u51fd\u6570\n    @staticmethod\n    def describe():\n        \"\"\"\u63cf\u8ff0\u52a8\u7269\"\"\"\n        return \"\u52a8\u7269\u662f\u591a\u7ec6\u80de\u771f\u6838\u751f\u7269\"\n\nclass Mammal(Animal):\n    \"\"\"\u54fa\u4e73\u52a8\u7269\u5b50\u7c7b\"\"\"\n\n    # \u8986\u76d6\u7c7b\u53d8\u91cf\n    kingdom = \"\u52a8\u7269\u754c-\u54fa\u4e73\u7eb2\"\n\n    def __init__(self, name: str, has_fur: bool = True):\n        # \u8c03\u7528\u7236\u7c7b\u6784\u9020\u5668\n        super().__init__(name)\n\n        # \u5b50\u7c7b\u7279\u6709\u7684\u5b9e\u4f8b\u53d8\u91cf\n        self.has_fur = has_fur\n        self.sound = \"\u54fa\u4e73\u52a8\u7269\u58f0\u97f3\"  # \u4fee\u6539\u7236\u7c7b\u5b9e\u4f8b\u53d8\u91cf\n\n    # \u8986\u76d6\u5b9e\u4f8b\u65b9\u6cd5\n    def speak(self):\n        \"\"\"\u54fa\u4e73\u52a8\u7269\u53d1\u58f0\"\"\"\n        base_sound = super().speak()\n        return f\"{base_sound} (\u54fa\u4e73\u52a8\u7269)\"\n\nclass Dog(Mammal):\n    \"\"\"\u72d7\u7c7b\"\"\"\n\n    # \u8986\u76d6\u7c7b\u53d8\u91cf\n    kingdom = \"\u52a8\u7269\u754c-\u54fa\u4e73\u7eb2-\u72ac\u79d1\"\n\n    def __init__(self, name: str, breed: str):\n        super().__init__(name)\n\n        # \u5b50\u7c7b\u7279\u6709\u5b9e\u4f8b\u53d8\u91cf\n        self.breed = breed\n        self.sound = \"\u6c6a\u6c6a!\"  # \u4fee\u6539\u58f0\u97f3\n\n    # \u8986\u76d6\u5b9e\u4f8b\u65b9\u6cd5\n    def speak(self):\n        \"\"\"\u72d7\u53eb\"\"\"\n        return f\"{self.name}({self.breed})\u53eb: {self.sound}\"\n\n    # \u5b50\u7c7b\u7279\u6709\u7684\u7c7b\u65b9\u6cd5\n    @classmethod\n    def create_random_dog(cls):\n        \"\"\"\u521b\u5efa\u968f\u673a\u72d7\uff08\u5de5\u5382\u65b9\u6cd5\uff09\"\"\"\n        import random\n        breeds = &#91;\"\u91d1\u6bdb\", \"\u54c8\u58eb\u5947\", \"\u6cf0\u8fea\", \"\u67ef\u57fa\"]\n        name = f\"\u72d7{cls.total_animals + 1}\"\n        return cls(name, random.choice(breeds))\n\nprint(\"=== \u7ee7\u627f\u4e2d\u7684\u884c\u4e3a\u5dee\u5f02 ===\")\n\nprint(\"1. \u7c7b\u53d8\u91cf\u7ee7\u627f:\")\nprint(f\"Animal.kingdom: {Animal.kingdom}\")\nprint(f\"Mammal.kingdom: {Mammal.kingdom}\")\nprint(f\"Dog.kingdom: {Dog.kingdom}\")\n\nprint(\"\\n2. \u5b9e\u4f8b\u65b9\u6cd5\u7ee7\u627f:\")\nanimal = Animal(\"\u666e\u901a\u52a8\u7269\")\nmammal = Mammal(\"\u54fa\u4e73\u52a8\u7269\")\ndog = Dog(\"\u65fa\u8d22\", \"\u91d1\u6bdb\")\n\nprint(animal.speak())\nprint(mammal.speak())\nprint(dog.speak())\n\nprint(\"\\n3. \u7c7b\u65b9\u6cd5\u7ee7\u627f:\")\nprint(f\"Animal.get_kingdom(): {Animal.get_kingdom()}\")\nprint(f\"Mammal.get_kingdom(): {Mammal.get_kingdom()}\")\nprint(f\"Dog.get_kingdom(): {Dog.get_kingdom()}\")\n\nprint(\"\\n4. \u9759\u6001\u65b9\u6cd5\u7ee7\u627f:\")\nprint(f\"Animal.describe(): {Animal.describe()}\")\nprint(f\"Dog.describe(): {Dog.describe()}\")  # \u7ee7\u627f\u7236\u7c7b\u7684\u9759\u6001\u65b9\u6cd5\n\nprint(\"\\n5. \u5de5\u5382\u65b9\u6cd5\u7684\u591a\u6001\u6027:\")\n# \u7236\u7c7b\u5de5\u5382\u65b9\u6cd5\u521b\u5efa\u7236\u7c7b\u5b9e\u4f8b\ngeneric_animal = Animal.create_anonymous()\nprint(f\"\u7236\u7c7b\u5de5\u5382\u521b\u5efa: {generic_animal.speak()}\")\n\n# \u5b50\u7c7b\u5de5\u5382\u65b9\u6cd5\u521b\u5efa\u5b50\u7c7b\u5b9e\u4f8b\nrandom_dog = Dog.create_random_dog()\nprint(f\"\u5b50\u7c7b\u5de5\u5382\u521b\u5efa: {random_dog.speak()}\")\n\n# \u6ce8\u610f\uff1aAnimal.create_anonymous() \u8fd4\u56deAnimal\u5b9e\u4f8b\n# \u800cDog.create_anonymous() \u8fd4\u56deDog\u5b9e\u4f8b\uff08\u56e0\u4e3acls\u662fDog\uff09\ndog_from_animal_factory = Dog.create_anonymous()\nprint(f\"Dog\u8c03\u7528\u7236\u7c7b\u5de5\u5382: {dog_from_animal_factory.speak()}\")\n\nprint(\"\\n6. \u7c7b\u53d8\u91cf\u5171\u4eab:\")\nprint(f\"\u603b\u52a8\u7269\u6570\uff08\u901a\u8fc7Animal\uff09: {Animal.total_animals}\")\nprint(f\"\u603b\u52a8\u7269\u6570\uff08\u901a\u8fc7Dog\uff09: {Dog.total_animals}\")\n\n# \u521b\u5efa\u65b0\u52a8\u7269\nnew_animal = Animal(\"\u65b0\u52a8\u7269\")\nprint(f\"\\n\u521b\u5efa\u65b0\u52a8\u7269\u540e:\")\nprint(f\"Animal.total_animals: {Animal.total_animals}\")\nprint(f\"Mammal.total_animals: {Mammal.total_animals}\")  # \u5171\u4eab\u540c\u4e00\u4e2a\u7c7b\u53d8\u91cf\nprint(f\"Dog.total_animals: {Dog.total_animals}\")<\/code><\/pre>\n\n\n\n<h2 class=\"wp-block-heading\">\u7b2c\u56db\u90e8\u5206\uff1a\u5b9e\u6218\u5e94\u7528 &#8211; \u6e38\u620f\u89d2\u8272\u7cfb\u7edf<\/h2>\n\n\n\n<p>\u8ba9\u6211\u4eec\u901a\u8fc7\u4e00\u4e2a\u5b8c\u6574\u7684\u6e38\u620f\u89d2\u8272\u7cfb\u7edf\u6765\u5c55\u793a\u9759\u6001\u6210\u5458\u548c\u5b9e\u4f8b\u6210\u5458\u7684\u5b9e\u9645\u5e94\u7528\u3002<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code># ============================================================================\n# \u6e38\u620f\u89d2\u8272\u7cfb\u7edf\uff1a\u7efc\u5408\u5e94\u7528\n# ============================================================================\n\nimport random\nimport time\nfrom typing import List, Dict, Optional\nfrom abc import ABC, abstractmethod\n\nclass GameCharacter(ABC):\n    \"\"\"\u6e38\u620f\u89d2\u8272\u62bd\u8c61\u57fa\u7c7b\"\"\"\n\n    # \u7c7b\u53d8\u91cf\uff1a\u6e38\u620f\u5168\u5c40\u8bbe\u7f6e\n    MAX_LEVEL = 100\n    BASE_HEALTH = 100\n    BASE_DAMAGE = 10\n\n    # \u7c7b\u53d8\u91cf\uff1a\u89d2\u8272\u7edf\u8ba1\n    total_characters = 0\n    characters_by_type = {}\n\n    def __init__(self, name: str, character_type: str):\n        # \u5b9e\u4f8b\u53d8\u91cf\uff1a\u89d2\u8272\u5c5e\u6027\n        self.name = name\n        self.character_type = character_type\n        self.level = 1\n        self.health = self._calculate_max_health()\n        self.experience = 0\n        self.inventory = &#91;]\n        self.position = (0, 0)  # \u5730\u56fe\u4f4d\u7f6e\n\n        # \u66f4\u65b0\u7c7b\u53d8\u91cf\n        GameCharacter.total_characters += 1\n        GameCharacter.characters_by_type.setdefault(character_type, 0)\n        GameCharacter.characters_by_type&#91;character_type] += 1\n\n        self.character_id = GameCharacter.total_characters\n\n    @abstractmethod\n    def _calculate_max_health(self) -&gt; int:\n        \"\"\"\u8ba1\u7b97\u6700\u5927\u751f\u547d\u503c\uff08\u62bd\u8c61\u65b9\u6cd5\uff09\"\"\"\n        pass\n\n    @abstractmethod\n    def attack(self) -&gt; int:\n        \"\"\"\u653b\u51fb\uff08\u62bd\u8c61\u65b9\u6cd5\uff09\"\"\"\n        pass\n\n    def take_damage(self, damage: int):\n        \"\"\"\u627f\u53d7\u4f24\u5bb3\"\"\"\n        self.health = max(0, self.health - damage)\n        if self.health == 0:\n            self._die()\n\n    def heal(self, amount: int):\n        \"\"\"\u6cbb\u7597\"\"\"\n        max_health = self._calculate_max_health()\n        self.health = min(max_health, self.health + amount)\n\n    def gain_experience(self, xp: int):\n        \"\"\"\u83b7\u5f97\u7ecf\u9a8c\"\"\"\n        self.experience += xp\n\n        # \u68c0\u67e5\u5347\u7ea7\n        while self.experience &gt;= self._xp_for_next_level():\n            self._level_up()\n\n    def _xp_for_next_level(self) -&gt; int:\n        \"\"\"\u5347\u7ea7\u6240\u9700\u7ecf\u9a8c\"\"\"\n        return 100 * self.level\n\n    def _level_up(self):\n        \"\"\"\u5347\u7ea7\"\"\"\n        if self.level &lt; GameCharacter.MAX_LEVEL:\n            self.level += 1\n            old_max_health = self._calculate_max_health() - self._health_per_level()\n            self.health = old_max_health + self._health_per_level()\n            print(f\"{self.name} \u5347\u7ea7\u5230 {self.level} \u7ea7!\")\n\n    @abstractmethod\n    def _health_per_level(self) -&gt; int:\n        \"\"\"\u6bcf\u7ea7\u589e\u52a0\u7684\u751f\u547d\u503c\"\"\"\n        pass\n\n    def _die(self):\n        \"\"\"\u6b7b\u4ea1\"\"\"\n        print(f\"{self.name} \u5df2\u6b7b\u4ea1!\")\n        GameCharacter.total_characters -= 1\n        GameCharacter.characters_by_type&#91;self.character_type] -= 1\n\n    def move(self, x: int, y: int):\n        \"\"\"\u79fb\u52a8\"\"\"\n        self.position = (x, y)\n        print(f\"{self.name} \u79fb\u52a8\u5230\u4f4d\u7f6e ({x}, {y})\")\n\n    def add_to_inventory(self, item: str):\n        \"\"\"\u6dfb\u52a0\u7269\u54c1\u5230\u80cc\u5305\"\"\"\n        self.inventory.append(item)\n        print(f\"{self.name} \u83b7\u5f97\u4e86 {item}\")\n\n    # \u7c7b\u65b9\u6cd5\n    @classmethod\n    def get_game_statistics(cls) -&gt; Dict:\n        \"\"\"\u83b7\u53d6\u6e38\u620f\u7edf\u8ba1\u4fe1\u606f\"\"\"\n        return {\n            'total_characters': cls.total_characters,\n            'characters_by_type': cls.characters_by_type,\n            'max_level': cls.MAX_LEVEL,\n            'base_health': cls.BASE_HEALTH,\n            'base_damage': cls.BASE_DAMAGE\n        }\n\n    @classmethod\n    def reset_game(cls):\n        \"\"\"\u91cd\u7f6e\u6e38\u620f\"\"\"\n        print(\"\u91cd\u7f6e\u6e38\u620f...\")\n        cls.total_characters = 0\n        cls.characters_by_type.clear()\n\n    # \u9759\u6001\u65b9\u6cd5\n    @staticmethod\n    def calculate_damage_multiplier(attacker_level: int, target_level: int) -&gt; float:\n        \"\"\"\u8ba1\u7b97\u4f24\u5bb3\u500d\u7387\uff08\u7b49\u7ea7\u538b\u5236\uff09\"\"\"\n        level_diff = attacker_level - target_level\n        if level_diff &gt;= 0:\n            return 1.0 + (level_diff * 0.05)  # \u6bcf\u9ad8\u4e00\u7ea7\u589e\u52a05%\u4f24\u5bb3\n        else:\n            return 1.0 \/ (1.0 + (-level_diff * 0.05))  # \u6bcf\u4f4e\u4e00\u7ea7\u51cf\u5c11\u4f24\u5bb3\n\n    @staticmethod\n    def roll_dice(sides: int = 20) -&gt; int:\n        \"\"\"\u63b7\u9ab0\u5b50\"\"\"\n        return random.randint(1, sides)\n\n    @staticmethod\n    def distance_between(pos1: tuple, pos2: tuple) -&gt; float:\n        \"\"\"\u8ba1\u7b97\u4e24\u70b9\u95f4\u8ddd\u79bb\"\"\"\n        x1, y1 = pos1\n        x2, y2 = pos2\n        return ((x2 - x1) ** 2 + (y2 - y1) ** 2) ** 0.5\n\n    def __str__(self):\n        return (f\"{self.name} ({self.character_type}) \"\n                f\"Lv.{self.level} HP:{self.health}\/{self._calculate_max_health()} \"\n                f\"EXP:{self.experience}\")\n\nclass Warrior(GameCharacter):\n    \"\"\"\u6218\u58eb\u7c7b\"\"\"\n\n    # \u7c7b\u53d8\u91cf\uff1a\u6218\u58eb\u7279\u6709\n    warrior_count = 0\n\n    def __init__(self, name: str, strength: int = 10):\n        super().__init__(name, \"\u6218\u58eb\")\n\n        # \u6218\u58eb\u7279\u6709\u5b9e\u4f8b\u53d8\u91cf\n        self.strength = strength\n        self.rage = 0  # \u6012\u6c14\u503c\n\n        # \u66f4\u65b0\u6218\u58eb\u8ba1\u6570\n        Warrior.warrior_count += 1\n\n    def _calculate_max_health(self) -&gt; int:\n        \"\"\"\u6218\u58eb\u751f\u547d\u503c\u8ba1\u7b97\"\"\"\n        return GameCharacter.BASE_HEALTH + (self.strength * 5) + ((self.level - 1) * self._health_per_level())\n\n    def _health_per_level(self) -&gt; int:\n        \"\"\"\u6218\u58eb\u6bcf\u7ea7\u589e\u52a0\u7684\u751f\u547d\u503c\"\"\"\n        return 20 + (self.strength \/\/ 2)\n\n    def attack(self) -&gt; int:\n        \"\"\"\u6218\u58eb\u653b\u51fb\"\"\"\n        base_damage = GameCharacter.BASE_DAMAGE + (self.strength * 2)\n\n        # \u6012\u6c14\u52a0\u6210\n        rage_bonus = self.rage * 0.01  # \u6bcf\u70b9\u6012\u6c14\u589e\u52a01%\u4f24\u5bb3\n\n        # \u66b4\u51fb\u5224\u5b9a\n        is_critical = False\n        if GameCharacter.roll_dice() &gt;= 19:  # 5%\u66b4\u51fb\u7387\n            is_critical = True\n            base_damage *= 2\n\n        damage = int(base_damage * (1 + rage_bonus))\n\n        # \u589e\u52a0\u6012\u6c14\n        self.rage = min(100, self.rage + 10)\n\n        attack_desc = f\"{self.name} \u9020\u6210 {damage} \u70b9\u4f24\u5bb3\"\n        if is_critical:\n            attack_desc += \" (\u66b4\u51fb!)\"\n        if self.rage &gt; 0:\n            attack_desc += f\" &#91;\u6012\u6c14: {self.rage}]\"\n\n        print(attack_desc)\n        return damage\n\n    def take_damage(self, damage: int):\n        \"\"\"\u6218\u58eb\u627f\u53d7\u4f24\u5bb3\uff08\u589e\u52a0\u6012\u6c14\uff09\"\"\"\n        super().take_damage(damage)\n        self.rage = min(100, self.rage + damage \/\/ 2)  # \u6839\u636e\u4f24\u5bb3\u589e\u52a0\u6012\u6c14\n\n    def use_special_ability(self):\n        \"\"\"\u4f7f\u7528\u7279\u6b8a\u80fd\u529b\uff08\u6d88\u8017\u6012\u6c14\uff09\"\"\"\n        if self.rage &gt;= 50:\n            print(f\"{self.name} \u4f7f\u7528\u65cb\u98ce\u65a9!\")\n            self.rage -= 50\n            return self.attack() * 2  # \u53cc\u91cd\u653b\u51fb\n        else:\n            print(\"\u6012\u6c14\u4e0d\u8db3!\")\n            return 0\n\n    @classmethod\n    def get_warrior_stats(cls):\n        \"\"\"\u83b7\u53d6\u6218\u58eb\u7edf\u8ba1\u4fe1\u606f\"\"\"\n        return {\n            'warrior_count': cls.warrior_count,\n            'description': '\u9ad8\u751f\u547d\u503c\uff0c\u9ad8\u7269\u7406\u4f24\u5bb3\u7684\u804c\u4e1a'\n        }\n\nclass Mage(GameCharacter):\n    \"\"\"\u6cd5\u5e08\u7c7b\"\"\"\n\n    # \u7c7b\u53d8\u91cf\uff1a\u6cd5\u5e08\u7279\u6709\n    mage_count = 0\n\n    def __init__(self, name: str, intelligence: int = 10):\n        super().__init__(name, \"\u6cd5\u5e08\")\n\n        # \u6cd5\u5e08\u7279\u6709\u5b9e\u4f8b\u53d8\u91cf\n        self.intelligence = intelligence\n        self.mana = 100  # \u9b54\u6cd5\u503c\n        self.spells = &#91;\"\u706b\u7403\u672f\", \"\u51b0\u7bad\u672f\", \"\u95ea\u7535\u94fe\"]\n\n        # \u66f4\u65b0\u6cd5\u5e08\u8ba1\u6570\n        Mage.mage_count += 1\n\n    def _calculate_max_health(self) -&gt; int:\n        \"\"\"\u6cd5\u5e08\u751f\u547d\u503c\u8ba1\u7b97\"\"\"\n        return GameCharacter.BASE_HEALTH + (self.intelligence * 2) + ((self.level - 1) * self._health_per_level())\n\n    def _health_per_level(self) -&gt; int:\n        \"\"\"\u6cd5\u5e08\u6bcf\u7ea7\u589e\u52a0\u7684\u751f\u547d\u503c\"\"\"\n        return 10 + (self.intelligence \/\/ 4)\n\n    def attack(self) -&gt; int:\n        \"\"\"\u6cd5\u5e08\u653b\u51fb\"\"\"\n        if self.mana &gt;= 10:\n            # \u4f7f\u7528\u9b54\u6cd5\u653b\u51fb\n            self.mana -= 10\n            spell = random.choice(self.spells)\n            damage = GameCharacter.BASE_DAMAGE + (self.intelligence * 3)\n\n            # \u667a\u529b\u52a0\u6210\n            int_bonus = self.intelligence * 0.05\n\n            damage = int(damage * (1 + int_bonus))\n            print(f\"{self.name} \u65bd\u653e {spell} \u9020\u6210 {damage} \u70b9\u4f24\u5bb3 &#91;\u6cd5\u529b: {self.mana}]\")\n            return damage\n        else:\n            # \u6cd5\u529b\u4e0d\u8db3\uff0c\u4f7f\u7528\u666e\u901a\u653b\u51fb\n            print(f\"{self.name} \u6cd5\u529b\u4e0d\u8db3\uff0c\u4f7f\u7528\u666e\u901a\u653b\u51fb\")\n            return GameCharacter.BASE_DAMAGE + self.intelligence\n\n    def restore_mana(self, amount: int):\n        \"\"\"\u6062\u590d\u6cd5\u529b\"\"\"\n        self.mana = min(100 + (self.intelligence * 5), self.mana + amount)\n        print(f\"{self.name} \u6062\u590d\u4e86 {amount} \u70b9\u6cd5\u529b &#91;\u5f53\u524d\u6cd5\u529b: {self.mana}]\")\n\n    def learn_spell(self, spell_name: str):\n        \"\"\"\u5b66\u4e60\u65b0\u6cd5\u672f\"\"\"\n        if spell_name not in self.spells:\n            self.spells.append(spell_name)\n            print(f\"{self.name} \u5b66\u4f1a\u4e86 {spell_name}!\")\n\n    @classmethod\n    def get_mage_stats(cls):\n        \"\"\"\u83b7\u53d6\u6cd5\u5e08\u7edf\u8ba1\u4fe1\u606f\"\"\"\n        return {\n            'mage_count': cls.mage_count,\n            'description': '\u9ad8\u9b54\u6cd5\u4f24\u5bb3\uff0c\u4f4e\u751f\u547d\u503c\u7684\u804c\u4e1a'\n        }\n\nclass Game:\n    \"\"\"\u6e38\u620f\u7ba1\u7406\u5668\"\"\"\n\n    def __init__(self, game_name: str):\n        self.game_name = game_name\n        self.characters = &#91;]\n        self.game_time = 0\n\n    def add_character(self, character: GameCharacter):\n        \"\"\"\u6dfb\u52a0\u89d2\u8272\"\"\"\n        self.characters.append(character)\n        print(f\"{character.name} \u52a0\u5165\u4e86\u6e38\u620f\")\n\n    def simulate_battle(self, character1: GameCharacter, character2: GameCharacter):\n        \"\"\"\u6a21\u62df\u6218\u6597\"\"\"\n        print(f\"\\n=== \u6218\u6597\u5f00\u59cb ===\")\n        print(f\"{character1.name} vs {character2.name}\")\n\n        round_num = 1\n        while character1.health &gt; 0 and character2.health &gt; 0 and round_num &lt;= 20:\n            print(f\"\\n\u7b2c {round_num} \u56de\u5408:\")\n\n            # \u89d2\u82721\u653b\u51fb\n            damage1 = character1.attack()\n            if damage1 &gt; 0:\n                # \u8ba1\u7b97\u4f24\u5bb3\u500d\u7387\uff08\u7b49\u7ea7\u538b\u5236\uff09\n                multiplier = GameCharacter.calculate_damage_multiplier(\n                    character1.level, character2.level\n                )\n                actual_damage = int(damage1 * multiplier)\n                character2.take_damage(actual_damage)\n\n            # \u5982\u679c\u89d2\u82722\u8fd8\u6d3b\u7740\uff0c\u53cd\u51fb\n            if character2.health &gt; 0:\n                damage2 = character2.attack()\n                if damage2 &gt; 0:\n                    multiplier = GameCharacter.calculate_damage_multiplier(\n                        character2.level, character1.level\n                    )\n                    actual_damage = int(damage2 * multiplier)\n                    character1.take_damage(actual_damage)\n\n            round_num += 1\n            time.sleep(0.1)  # \u77ed\u6682\u5ef6\u8fdf\uff0c\u4f7f\u8f93\u51fa\u66f4\u6613\u8bfb\n\n        # \u5224\u5b9a\u80dc\u8d1f\n        if character1.health &gt; 0 and character2.health &lt;= 0:\n            winner = character1\n            loser = character2\n        elif character2.health &gt; 0 and character1.health &lt;= 0:\n            winner = character2\n            loser = character1\n        else:\n            print(\"\u6218\u6597\u5e73\u5c40!\")\n            return\n\n        # \u80dc\u5229\u8005\u83b7\u5f97\u7ecf\u9a8c\n        xp_reward = loser.level * 50\n        winner.gain_experience(xp_reward)\n\n        print(f\"\\n\u6218\u6597\u7ed3\u675f!\")\n        print(f\"\u80dc\u5229\u8005: {winner.name}\")\n        print(f\"\u83b7\u5f97\u7ecf\u9a8c: {xp_reward}\")\n        print(f\"\u5f53\u524d\u72b6\u6001: {winner}\")\n\n    def move_all_characters(self):\n        \"\"\"\u79fb\u52a8\u6240\u6709\u89d2\u8272\"\"\"\n        print(f\"\\n=== \u79fb\u52a8\u9636\u6bb5 ===\")\n        for character in self.characters:\n            if character.health &gt; 0:\n                x = random.randint(-10, 10)\n                y = random.randint(-10, 10)\n                character.move(x, y)\n\n    def show_game_state(self):\n        \"\"\"\u663e\u793a\u6e38\u620f\u72b6\u6001\"\"\"\n        print(f\"\\n=== \u6e38\u620f\u72b6\u6001 ===\")\n        print(f\"\u6e38\u620f: {self.game_name}\")\n        print(f\"\u6e38\u620f\u65f6\u95f4: {self.game_time} \u5206\u949f\")\n\n        # \u663e\u793a\u89d2\u8272\u4fe1\u606f\n        print(f\"\\n\u89d2\u8272\u5217\u8868 ({len(self.characters)} \u4e2a):\")\n        for character in self.characters:\n            status = \"\u5b58\u6d3b\" if character.health &gt; 0 else \"\u6b7b\u4ea1\"\n            print(f\"  {character} - {status}\")\n\n        # \u663e\u793a\u6e38\u620f\u7edf\u8ba1\u4fe1\u606f\n        stats = GameCharacter.get_game_statistics()\n        print(f\"\\n\u6e38\u620f\u7edf\u8ba1:\")\n        for key, value in stats.items():\n            print(f\"  {key}: {value}\")\n\n        # \u663e\u793a\u804c\u4e1a\u7279\u5b9a\u7edf\u8ba1\n        print(f\"\\n\u804c\u4e1a\u7edf\u8ba1:\")\n        print(f\"  \u6218\u58eb: {Warrior.get_warrior_stats()}\")\n        print(f\"  \u6cd5\u5e08: {Mage.get_mage_stats()}\")\n\n# \u8fd0\u884c\u6e38\u620f\u6a21\u62df\ndef run_game_simulation():\n    \"\"\"\u8fd0\u884c\u6e38\u620f\u6a21\u62df\"\"\"\n\n    print(\"=== \u6e38\u620f\u89d2\u8272\u7cfb\u7edf\u6a21\u62df ===\")\n\n    # \u521b\u5efa\u6e38\u620f\n    game = Game(\"\u52c7\u8005\u5192\u9669\")\n\n    # \u521b\u5efa\u89d2\u8272\n    warrior = Warrior(\"\u4e9a\u745f\", strength=15)\n    mage = Mage(\"\u6885\u6797\", intelligence=18)\n    warrior2 = Warrior(\"\u76d6\u4f26\", strength=12)\n    mage2 = Mage(\"\u5409\u5b89\u5a1c\", intelligence=16)\n\n    # \u6dfb\u52a0\u5230\u6e38\u620f\n    game.add_character(warrior)\n    game.add_character(mage)\n    game.add_character(warrior2)\n    game.add_character(mage2)\n\n    # \u521d\u59cb\u72b6\u6001\n    game.show_game_state()\n\n    # \u6a21\u62df\u6218\u6597\n    game.simulate_battle(warrior, mage)\n\n    # \u5347\u7ea7\u548c\u83b7\u5f97\u7269\u54c1\n    warrior.add_to_inventory(\"\u94a2\u94c1\u957f\u5251\")\n    mage.learn_spell(\"\u9668\u77f3\u672f\")\n    mage.restore_mana(50)\n\n    # \u53e6\u4e00\u573a\u6218\u6597\n    if warrior2.health &gt; 0 and mage2.health &gt; 0:\n        game.simulate_battle(warrior2, mage2)\n\n    # \u79fb\u52a8\u89d2\u8272\n    game.move_all_characters()\n\n    # \u6700\u7ec8\u72b6\u6001\n    game.game_time = 30  # 30\u5206\u949f\u6e38\u620f\u65f6\u95f4\n    game.show_game_state()\n\n    # \u4f7f\u7528\u9759\u6001\u65b9\u6cd5\n    print(f\"\\n=== \u5de5\u5177\u51fd\u6570\u6f14\u793a ===\")\n    pos1 = (0, 0)\n    pos2 = (3, 4)\n    distance = GameCharacter.distance_between(pos1, pos2)\n    print(f\"\u4e24\u70b9 {pos1} \u548c {pos2} \u7684\u8ddd\u79bb: {distance:.2f}\")\n\n    # \u63b7\u9ab0\u5b50\n    dice_roll = GameCharacter.roll_dice()\n    print(f\"\u63b7\u9ab0\u5b50: {dice_roll}\")\n\n    # \u91cd\u7f6e\u6e38\u620f\n    print(f\"\\n=== \u91cd\u7f6e\u6e38\u620f ===\")\n    GameCharacter.reset_game()\n    game.show_game_state()\n\nif __name__ == \"__main__\":\n    run_game_simulation()<\/code><\/pre>\n\n\n\n<h2 class=\"wp-block-heading\">\u7b2c\u4e94\u90e8\u5206\uff1a\u9ad8\u7ea7\u4e3b\u9898\u4e0e\u6700\u4f73\u5b9e\u8df5<\/h2>\n\n\n\n<h3 class=\"wp-block-heading\">5.1 \u5143\u7c7b\u4e2d\u7684\u9759\u6001\u6210\u5458<\/h3>\n\n\n\n<p>\u5728Python\u4e2d\uff0c\u751a\u81f3\u53ef\u4ee5\u5728\u5143\u7c7b\u7ea7\u522b\u5b9a\u4e49\u7c7b\u53d8\u91cf\uff0c\u8fd9\u4e9b\u53d8\u91cf\u5c06\u88ab\u6240\u6709\u4f7f\u7528\u8be5\u5143\u7c7b\u7684\u7c7b\u5171\u4eab\u3002<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code># ============================================================================\n# \u5143\u7c7b\u4e2d\u7684\u9759\u6001\u6210\u5458\n# ============================================================================\n\nclass SingletonMeta(type):\n    \"\"\"\u5355\u4f8b\u5143\u7c7b\uff1a\u786e\u4fdd\u7c7b\u53ea\u6709\u4e00\u4e2a\u5b9e\u4f8b\"\"\"\n\n    # \u5143\u7c7b\u7ea7\u522b\u7684\u7c7b\u53d8\u91cf\n    _instances = {}\n\n    def __call__(cls, *args, **kwargs):\n        \"\"\"\u5f53\u7c7b\u88ab\u8c03\u7528\u65f6\u89e6\u53d1\uff08\u521b\u5efa\u5b9e\u4f8b\uff09\"\"\"\n        if cls not in cls._instances:\n            print(f\"\u521b\u5efa {cls.__name__} \u7684\u552f\u4e00\u5b9e\u4f8b\")\n            cls._instances&#91;cls] = super().__call__(*args, **kwargs)\n        else:\n            print(f\"\u8fd4\u56de {cls.__name__} \u7684\u73b0\u6709\u5b9e\u4f8b\")\n        return cls._instances&#91;cls]\n\n    @classmethod\n    def get_instance_count(mcs):\n        \"\"\"\u83b7\u53d6\u5df2\u521b\u5efa\u7684\u5355\u4f8b\u6570\u91cf\uff08\u5143\u7c7b\u65b9\u6cd5\uff09\"\"\"\n        return len(mcs._instances)\n\nclass DatabaseConnection(metaclass=SingletonMeta):\n    \"\"\"\u6570\u636e\u5e93\u8fde\u63a5\uff08\u5355\u4f8b\uff09\"\"\"\n\n    def __init__(self, connection_string: str):\n        self.connection_string = connection_string\n        self.is_connected = False\n\n    def connect(self):\n        \"\"\"\u8fde\u63a5\u6570\u636e\u5e93\"\"\"\n        if not self.is_connected:\n            print(f\"\u8fde\u63a5\u5230: {self.connection_string}\")\n            self.is_connected = True\n        else:\n            print(\"\u5df2\u7ecf\u8fde\u63a5\")\n\nclass Logger(metaclass=SingletonMeta):\n    \"\"\"\u65e5\u5fd7\u8bb0\u5f55\u5668\uff08\u5355\u4f8b\uff09\"\"\"\n\n    def __init__(self, log_level: str = \"INFO\"):\n        self.log_level = log_level\n        self.logs = &#91;]\n\n    def log(self, message: str):\n        \"\"\"\u8bb0\u5f55\u65e5\u5fd7\"\"\"\n        log_entry = f\"&#91;{self.log_level}] {message}\"\n        self.logs.append(log_entry)\n        print(log_entry)\n\nprint(\"=== \u5143\u7c7b\u4e2d\u7684\u9759\u6001\u6210\u5458 ===\")\n\n# \u521b\u5efa\u5355\u4f8b\u5b9e\u4f8b\ndb1 = DatabaseConnection(\"mysql:\/\/localhost:3306\/mydb\")\ndb1.connect()\n\ndb2 = DatabaseConnection(\"mysql:\/\/localhost:3306\/mydb\")\ndb2.connect()\n\nprint(f\"db1 \u548c db2 \u662f\u540c\u4e00\u4e2a\u5b9e\u4f8b\u5417? {db1 is db2}\")\n\n# \u521b\u5efa\u53e6\u4e00\u4e2a\u5355\u4f8b\nlogger1 = Logger(\"DEBUG\")\nlogger1.log(\"\u6d4b\u8bd5\u6d88\u606f\")\n\nlogger2 = Logger(\"ERROR\")  # \u6ce8\u610f\uff1a\u4e0d\u4f1a\u91cd\u65b0\u521d\u59cb\u5316\uff0clog_level\u4ecd\u7136\u662fDEBUG\nlogger2.log(\"\u53e6\u4e00\u4e2a\u6d88\u606f\")\n\nprint(f\"logger1 \u548c logger2 \u662f\u540c\u4e00\u4e2a\u5b9e\u4f8b\u5417? {logger1 is logger2}\")\n\n# \u901a\u8fc7\u5143\u7c7b\u83b7\u53d6\u5355\u4f8b\u6570\u91cf\nprint(f\"\u5355\u4f8b\u5b9e\u4f8b\u6570\u91cf: {SingletonMeta.get_instance_count()}\")<\/code><\/pre>\n\n\n\n<h3 class=\"wp-block-heading\">5.2 \u63cf\u8ff0\u7b26\u534f\u8bae\u4e0e\u5c5e\u6027\u8bbf\u95ee<\/h3>\n\n\n\n<p>Python\u7684\u63cf\u8ff0\u7b26\u534f\u8bae\u5141\u8bb8\u66f4\u7cbe\u7ec6\u5730\u63a7\u5236\u5c5e\u6027\u8bbf\u95ee\uff0c\u8fd9\u5bf9\u4e8e\u5b9e\u73b0\u9ad8\u7ea7\u7684\u9759\u6001\u6210\u5458\u884c\u4e3a\u975e\u5e38\u6709\u7528\u3002<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code># ============================================================================\n# \u63cf\u8ff0\u7b26\u534f\u8bae\u4e0e\u7c7b\u53d8\u91cf\n# ============================================================================\n\nclass ClassProperty:\n    \"\"\"\u7c7b\u5c5e\u6027\u63cf\u8ff0\u7b26\uff1a\u5b9e\u73b0\u7c7b\u7ea7\u522b\u7684property\"\"\"\n\n    def __init__(self, fget=None, fset=None):\n        self.fget = fget\n        self.fset = fset\n\n    def __get__(self, obj, objtype=None):\n        if objtype is None:\n            objtype = type(obj)\n        if self.fget is None:\n            raise AttributeError(\"\u4e0d\u53ef\u8bfb\")\n        return self.fget(objtype)\n\n    def __set__(self, obj, value):\n        if self.fset is None:\n            raise AttributeError(\"\u4e0d\u53ef\u5199\")\n        if isinstance(obj, type):\n            # \u901a\u8fc7\u7c7b\u8bbe\u7f6e\n            self.fset(obj, value)\n        else:\n            # \u901a\u8fc7\u5b9e\u4f8b\u8bbe\u7f6e\n            self.fset(type(obj), value)\n\n    def setter(self, fset):\n        \"\"\"\u8bbe\u7f6esetter\u65b9\u6cd5\"\"\"\n        return type(self)(self.fget, fset)\n\ndef classproperty(func):\n    \"\"\"\u7c7b\u5c5e\u6027\u88c5\u9970\u5668\"\"\"\n    return ClassProperty(func)\n\nclass Configuration:\n    \"\"\"\u914d\u7f6e\u7c7b\uff1a\u4f7f\u7528\u7c7b\u5c5e\u6027\u63cf\u8ff0\u7b26\"\"\"\n\n    # \u7c7b\u53d8\u91cf\n    _settings = {\n        'debug': False,\n        'timeout': 30,\n        'max_connections': 100\n    }\n\n    # \u7c7b\u5c5e\u6027\n    @classproperty\n    def debug(cls):\n        \"\"\"\u8c03\u8bd5\u6a21\u5f0f\uff08\u7c7b\u5c5e\u6027\uff09\"\"\"\n        return cls._settings&#91;'debug']\n\n    @debug.setter\n    def debug(cls, value):\n        \"\"\"\u8bbe\u7f6e\u8c03\u8bd5\u6a21\u5f0f\"\"\"\n        if not isinstance(value, bool):\n            raise TypeError(\"debug\u5fc5\u987b\u662f\u5e03\u5c14\u503c\")\n        cls._settings&#91;'debug'] = value\n        print(f\"\u8c03\u8bd5\u6a21\u5f0f\u5df2\u8bbe\u7f6e\u4e3a: {value}\")\n\n    @classproperty\n    def timeout(cls):\n        \"\"\"\u8d85\u65f6\u65f6\u95f4\uff08\u7c7b\u5c5e\u6027\uff09\"\"\"\n        return cls._settings&#91;'timeout']\n\n    @timeout.setter\n    def timeout(cls, value):\n        \"\"\"\u8bbe\u7f6e\u8d85\u65f6\u65f6\u95f4\"\"\"\n        if value &lt;= 0:\n            raise ValueError(\"timeout\u5fc5\u987b\u5927\u4e8e0\")\n        cls._settings&#91;'timeout'] = value\n\n    @classmethod\n    def get_all_settings(cls):\n        \"\"\"\u83b7\u53d6\u6240\u6709\u8bbe\u7f6e\"\"\"\n        return cls._settings.copy()\n\nprint(\"=== \u7c7b\u5c5e\u6027\u63cf\u8ff0\u7b26 ===\")\n\n# \u901a\u8fc7\u7c7b\u8bbf\u95ee\nprint(f\"\u5f53\u524d\u8c03\u8bd5\u6a21\u5f0f: {Configuration.debug}\")\nConfiguration.debug = True\nprint(f\"\u4fee\u6539\u540e\u8c03\u8bd5\u6a21\u5f0f: {Configuration.debug}\")\n\nprint(f\"\\n\u5f53\u524d\u8d85\u65f6\u65f6\u95f4: {Configuration.timeout}\")\nConfiguration.timeout = 60\nprint(f\"\u4fee\u6539\u540e\u8d85\u65f6\u65f6\u95f4: {Configuration.timeout}\")\n\n# \u901a\u8fc7\u5b9e\u4f8b\u8bbf\u95ee\nconfig = Configuration()\nprint(f\"\\n\u901a\u8fc7\u5b9e\u4f8b\u8bbf\u95ee\u8c03\u8bd5\u6a21\u5f0f: {config.debug}\")\n\n# \u5c1d\u8bd5\u901a\u8fc7\u5b9e\u4f8b\u4fee\u6539\ntry:\n    config.timeout = -5\nexcept ValueError as e:\n    print(f\"\u9a8c\u8bc1\u751f\u6548: {e}\")\n\nprint(f\"\\n\u6240\u6709\u8bbe\u7f6e: {Configuration.get_all_settings()}\")<\/code><\/pre>\n\n\n\n<h3 class=\"wp-block-heading\">5.3 \u6700\u4f73\u5b9e\u8df5\u603b\u7ed3<\/h3>\n\n\n\n<ol class=\"wp-block-list\">\n<li><strong>\u9075\u5faa\u6700\u5c0f\u6743\u9650\u539f\u5219<\/strong>\uff1a<\/li>\n<\/ol>\n\n\n\n<pre class=\"wp-block-code\"><code>   # \u597d\uff1a\u53ea\u66b4\u9732\u5fc5\u8981\u7684\u63a5\u53e3\n   class Order:\n       def __init__(self):\n           self._items = &#91;]  # \u79c1\u6709\u5b9e\u4f8b\u53d8\u91cf\n           self._total = 0   # \u79c1\u6709\u5b9e\u4f8b\u53d8\u91cf\n\n       def add_item(self, item, price):\n           \"\"\"\u516c\u5171\u63a5\u53e3\uff1a\u6dfb\u52a0\u5546\u54c1\"\"\"\n           self._items.append((item, price))\n           self._total += price\n\n       def get_total(self):\n           \"\"\"\u516c\u5171\u63a5\u53e3\uff1a\u83b7\u53d6\u603b\u4ef7\"\"\"\n           return self._total\n\n       # \u4e0d\u76f4\u63a5\u66b4\u9732_items\u548c_total<\/code><\/pre>\n\n\n\n<ol start=\"2\" class=\"wp-block-list\">\n<li><strong>\u4f7f\u7528\u7c7b\u65b9\u6cd5\u4f5c\u4e3a\u66ff\u4ee3\u6784\u9020\u51fd\u6570<\/strong>\uff1a<\/li>\n<\/ol>\n\n\n\n<pre class=\"wp-block-code\"><code>   class Point:\n       def __init__(self, x, y):\n           self.x = x\n           self.y = y\n\n       @classmethod\n       def from_polar(cls, radius, angle):\n           \"\"\"\u4ece\u6781\u5750\u6807\u521b\u5efa\u70b9\"\"\"\n           import math\n           x = radius * math.cos(angle)\n           y = radius * math.sin(angle)\n           return cls(x, y)\n\n       @classmethod\n       def from_tuple(cls, point_tuple):\n           \"\"\"\u4ece\u5143\u7ec4\u521b\u5efa\u70b9\"\"\"\n           return cls(*point_tuple)<\/code><\/pre>\n\n\n\n<ol start=\"3\" class=\"wp-block-list\">\n<li><strong>\u9759\u6001\u65b9\u6cd5\u7528\u4e8e\u7eaf\u51fd\u6570<\/strong>\uff1a<\/li>\n<\/ol>\n\n\n\n<pre class=\"wp-block-code\"><code>   class DataValidator:\n       @staticmethod\n       def is_valid_email(email: str) -&gt; bool:\n           \"\"\"\u9a8c\u8bc1\u90ae\u7bb1\u683c\u5f0f\"\"\"\n           import re\n           pattern = r'^&#91;\\w\\.-]+@&#91;\\w\\.-]+\\.\\w+$'\n           return bool(re.match(pattern, email))\n\n       @staticmethod\n       def is_valid_phone(phone: str) -&gt; bool:\n           \"\"\"\u9a8c\u8bc1\u7535\u8bdd\u53f7\u7801\"\"\"\n           import re\n           pattern = r'^\\+?&#91;1-9]\\d{1,14}$'\n           return bool(re.match(pattern, phone))<\/code><\/pre>\n\n\n\n<ol start=\"4\" class=\"wp-block-list\">\n<li><strong>\u907f\u514d\u8fc7\u5ea6\u4f7f\u7528\u7c7b\u53d8\u91cf<\/strong>\uff1a<\/li>\n<\/ol>\n\n\n\n<pre class=\"wp-block-code\"><code>   # \u4e0d\u597d\uff1a\u8fc7\u5ea6\u4f7f\u7528\u7c7b\u53d8\u91cf\u5b58\u50a8\u5b9e\u4f8b\u6570\u636e\n   class BadUser:\n       all_names = &#91;]  # \u7c7b\u53d8\u91cf\u5b58\u50a8\u6240\u6709\u7528\u6237\u540d\n\n       def __init__(self, name):\n           self.name = name\n           self.all_names.append(name)  # \u4fee\u6539\u7c7b\u53d8\u91cf\n\n   # \u597d\uff1a\u4f7f\u7528\u5b9e\u4f8b\u53d8\u91cf\n   class GoodUser:\n       def __init__(self, name):\n           self.name = name  # \u5b9e\u4f8b\u53d8\u91cf\n\n   class UserManager:\n       all_users = &#91;]  # \u7c7b\u53d8\u91cf\uff0c\u4f46\u7531\u7ba1\u7406\u5668\u7c7b\u8d1f\u8d23\n\n       @classmethod\n       def add_user(cls, user):\n           cls.all_users.append(user)<\/code><\/pre>\n\n\n\n<ol start=\"5\" class=\"wp-block-list\">\n<li><strong>\u8003\u8651\u7ebf\u7a0b\u5b89\u5168\u6027<\/strong>\uff1a<\/li>\n<\/ol>\n\n\n\n<pre class=\"wp-block-code\"><code>   import threading\n\n   class Counter:\n       # \u7c7b\u53d8\u91cf\n       _count = 0\n       _lock = threading.Lock()\n\n       @classmethod\n       def increment(cls):\n           \"\"\"\u7ebf\u7a0b\u5b89\u5168\u7684\u9012\u589e\"\"\"\n           with cls._lock:\n               cls._count += 1\n               return cls._count\n\n       @classmethod\n       def get_count(cls):\n           \"\"\"\u83b7\u53d6\u8ba1\u6570\u503c\"\"\"\n           with cls._lock:\n               return cls._count<\/code><\/pre>\n\n\n\n<h2 class=\"wp-block-heading\">\u7b2c\u516d\u90e8\u5206\uff1a\u603b\u7ed3\u4e0e\u5c55\u671b<\/h2>\n\n\n\n<h3 class=\"wp-block-heading\">\u6838\u5fc3\u6982\u5ff5\u56de\u987e<\/h3>\n\n\n\n<ol class=\"wp-block-list\">\n<li><strong>\u5b9e\u4f8b\u6210\u5458<\/strong>\uff1a<\/li>\n<\/ol>\n\n\n\n<ul class=\"wp-block-list\">\n<li>\u5c5e\u4e8e\u5bf9\u8c61\u7684\u4e2a\u4f53\u7279\u5f81<\/li>\n\n\n\n<li>\u6bcf\u4e2a\u5bf9\u8c61\u6709\u72ec\u7acb\u526f\u672c<\/li>\n\n\n\n<li>\u5b9e\u4f8b\u65b9\u6cd5\u901a\u8fc7<code>self<\/code>\u64cd\u4f5c\u5bf9\u8c61\u72b6\u6001<\/li>\n<\/ul>\n\n\n\n<ol class=\"wp-block-list\">\n<li><strong>\u9759\u6001\u6210\u5458<\/strong>\uff1a<\/li>\n<\/ol>\n\n\n\n<ul class=\"wp-block-list\">\n<li><strong>\u7c7b\u53d8\u91cf<\/strong>\uff1a\u7c7b\u7684\u5171\u4eab\u72b6\u6001\uff0c\u6240\u6709\u5b9e\u4f8b\u5171\u4eab<\/li>\n\n\n\n<li><strong>\u7c7b\u65b9\u6cd5<\/strong>\uff1a\u64cd\u4f5c\u7c7b\u72b6\u6001\uff0c\u901a\u8fc7<code>cls<\/code>\u8bbf\u95ee\u7c7b\u53d8\u91cf<\/li>\n\n\n\n<li><strong>\u9759\u6001\u65b9\u6cd5<\/strong>\uff1a\u4e0e\u7c7b\u76f8\u5173\u7684\u5de5\u5177\u51fd\u6570\uff0c\u4e0d\u8bbf\u95ee\u72b6\u6001<\/li>\n<\/ul>\n\n\n\n<ol class=\"wp-block-list\">\n<li><strong>\u8bbe\u8ba1\u54f2\u5b66<\/strong>\uff1a<\/li>\n<\/ol>\n\n\n\n<ul class=\"wp-block-list\">\n<li>\u5b9e\u4f8b\u6210\u5458\u5173\u6ce8<strong>\u5bf9\u8c61\u4e2a\u4f53<\/strong>\u7684\u72ec\u7279\u6027<\/li>\n\n\n\n<li>\u9759\u6001\u6210\u5458\u5173\u6ce8<strong>\u7c7b\u6574\u4f53<\/strong>\u7684\u5171\u4eab\u6027<\/li>\n<\/ul>\n\n\n\n<h3 class=\"wp-block-heading\">\u8bbe\u8ba1\u539f\u5219\u603b\u7ed3<\/h3>\n\n\n\n<ol class=\"wp-block-list\">\n<li><strong>\u5355\u4e00\u804c\u8d23\u539f\u5219<\/strong>\uff1a<\/li>\n<\/ol>\n\n\n\n<ul class=\"wp-block-list\">\n<li>\u5b9e\u4f8b\u65b9\u6cd5\uff1a\u8d1f\u8d23\u5bf9\u8c61\u72b6\u6001\u7ba1\u7406<\/li>\n\n\n\n<li>\u7c7b\u65b9\u6cd5\uff1a\u8d1f\u8d23\u7c7b\u72b6\u6001\u7ba1\u7406<\/li>\n\n\n\n<li>\u9759\u6001\u65b9\u6cd5\uff1a\u8d1f\u8d23\u72ec\u7acb\u5de5\u5177\u51fd\u6570<\/li>\n<\/ul>\n\n\n\n<ol class=\"wp-block-list\">\n<li><strong>\u5f00\u95ed\u539f\u5219<\/strong>\uff1a<\/li>\n<\/ol>\n\n\n\n<ul class=\"wp-block-list\">\n<li>\u901a\u8fc7\u7c7b\u65b9\u6cd5\u63d0\u4f9b\u7075\u6d3b\u7684\u5b9e\u4f8b\u521b\u5efa\u65b9\u5f0f<\/li>\n\n\n\n<li>\u9759\u6001\u65b9\u6cd5\u63d0\u4f9b\u53ef\u6269\u5c55\u7684\u5de5\u5177\u51fd\u6570<\/li>\n<\/ul>\n\n\n\n<ol class=\"wp-block-list\">\n<li><strong>\u63a5\u53e3\u9694\u79bb\u539f\u5219<\/strong>\uff1a<\/li>\n<\/ol>\n\n\n\n<ul class=\"wp-block-list\">\n<li>\u4e3a\u4e0d\u540c\u7528\u9014\u63d0\u4f9b\u4e13\u95e8\u7684\u65b9\u6cd5\u7c7b\u578b<\/li>\n\n\n\n<li>\u907f\u514d\u65b9\u6cd5\u627f\u62c5\u8fc7\u591a\u804c\u8d23<\/li>\n<\/ul>\n\n\n\n<h3 class=\"wp-block-heading\">\u5e94\u7528\u573a\u666f\u6307\u5357<\/h3>\n\n\n\n<figure class=\"wp-block-table\"><table class=\"has-fixed-layout\"><thead><tr><th>\u573a\u666f<\/th><th>\u63a8\u8350\u4f7f\u7528<\/th><th>\u539f\u56e0<\/th><\/tr><\/thead><tbody><tr><td>\u64cd\u4f5c\u5bf9\u8c61\u72b6\u6001<\/td><td>\u5b9e\u4f8b\u65b9\u6cd5<\/td><td>\u9700\u8981\u8bbf\u95ee<code>self<\/code><\/td><\/tr><tr><td>\u4fee\u6539\u7c7b\u7ea7\u522b\u914d\u7f6e<\/td><td>\u7c7b\u65b9\u6cd5<\/td><td>\u9700\u8981\u8bbf\u95ee<code>cls<\/code><\/td><\/tr><tr><td>\u5de5\u5382\u6a21\u5f0f<\/td><td>\u7c7b\u65b9\u6cd5<\/td><td>\u901a\u8fc7<code>cls<\/code>\u521b\u5efa\u5b9e\u4f8b<\/td><\/tr><tr><td>\u5de5\u5177\u51fd\u6570<\/td><td>\u9759\u6001\u65b9\u6cd5<\/td><td>\u4e0e\u72b6\u6001\u65e0\u5173<\/td><\/tr><tr><td>\u5e38\u91cf\u5b9a\u4e49<\/td><td>\u7c7b\u53d8\u91cf<\/td><td>\u7c7b\u7ea7\u522b\u5171\u4eab<\/td><\/tr><tr><td>\u5b9e\u4f8b\u8ba1\u6570\u5668<\/td><td>\u7c7b\u53d8\u91cf<\/td><td>\u8ddf\u8e2a\u7c7b\u72b6\u6001<\/td><\/tr><\/tbody><\/table><\/figure>\n\n\n\n<h3 class=\"wp-block-heading\">\u4e0b\u4e00\u6b65\u5b66\u4e60\u65b9\u5411<\/h3>\n\n\n\n<ol class=\"wp-block-list\">\n<li><strong>\u6df1\u5165Python\u5143\u7c7b<\/strong>\uff1a\u7406\u89e3\u7c7b\u7684\u7c7b\uff0c\u638c\u63e1\u66f4\u9ad8\u7ea7\u7684\u7c7b\u5b9a\u5236\u6280\u672f<\/li>\n\n\n\n<li><strong>\u7814\u7a76\u63cf\u8ff0\u7b26\u534f\u8bae<\/strong>\uff1a\u6df1\u5165\u7406\u89e3\u5c5e\u6027\u8bbf\u95ee\u7684\u5e95\u5c42\u673a\u5236<\/li>\n\n\n\n<li><strong>\u5b66\u4e60\u8bbe\u8ba1\u6a21\u5f0f<\/strong>\uff1a\u4e86\u89e3\u5404\u79cd\u6a21\u5f0f\u4e2d\u9759\u6001\u6210\u5458\u548c\u5b9e\u4f8b\u6210\u5458\u7684\u5e94\u7528<\/li>\n\n\n\n<li><strong>\u63a2\u7d22\u51fd\u6570\u5f0f\u7f16\u7a0b<\/strong>\uff1a\u4e86\u89e3\u7eaf\u51fd\u6570\u4e0e\u9759\u6001\u65b9\u6cd5\u7684\u5173\u7cfb<\/li>\n\n\n\n<li><strong>\u5b9e\u8df5\u5927\u578b\u9879\u76ee<\/strong>\uff1a\u5728\u771f\u5b9e\u9879\u76ee\u4e2d\u5e94\u7528\u8fd9\u4e9b\u6982\u5ff5<\/li>\n<\/ol>\n\n\n\n<h3 class=\"wp-block-heading\">\u6700\u7ec8\u601d\u8003<\/h3>\n\n\n\n<p>\u9759\u6001\u6210\u5458\u4e0e\u5b9e\u4f8b\u6210\u5458\u7684\u533a\u5206\u4f53\u73b0\u4e86\u9762\u5411\u5bf9\u8c61\u7f16\u7a0b\u7684\u4e24\u4e2a\u57fa\u672c\u7ef4\u5ea6\uff1a<strong>\u4e2a\u4f53\u4e0e\u7fa4\u4f53<\/strong>\u3001<strong>\u72b6\u6001\u4e0e\u884c\u4e3a<\/strong>\u3002\u638c\u63e1\u5b83\u4eec\u7684\u533a\u522b\u548c\u5e94\u7528\uff0c\u662f\u5199\u51fa\u4f18\u96c5\u3001\u53ef\u7ef4\u62a4\u9762\u5411\u5bf9\u8c61\u4ee3\u7801\u7684\u5173\u952e\u3002<\/p>\n\n\n\n<p>\u8bb0\u4f4f\uff0c\u597d\u7684\u8bbe\u8ba1\u4e0d\u662f\u6559\u6761\u5730\u9075\u5faa\u89c4\u5219\uff0c\u800c\u662f\u6839\u636e\u5177\u4f53\u9700\u6c42\u505a\u51fa\u6070\u5f53\u7684\u9009\u62e9\u3002\u968f\u7740\u7ecf\u9a8c\u7684\u79ef\u7d2f\uff0c\u4f60\u5c06\u9010\u6e10\u5f62\u6210\u81ea\u5df1\u7684\u8bbe\u8ba1\u76f4\u89c9\uff0c\u80fd\u591f\u81ea\u7136\u5730\u9009\u62e9\u6700\u9002\u5408\u7684\u6210\u5458\u7c7b\u578b\u3002<\/p>\n\n\n\n<p>\u9762\u5411\u5bf9\u8c61\u7f16\u7a0b\u5c31\u50cf\u662f\u5728\u4e2a\u4f53\u4e0e\u96c6\u4f53\u4e4b\u95f4\u5bfb\u627e\u5e73\u8861\u7684\u827a\u672f\u3002\u5b9e\u4f8b\u6210\u5458\u8ba9\u6211\u4eec\u5173\u6ce8\u6bcf\u4e2a\u5bf9\u8c61\u7684\u72ec\u7279\u6027\uff0c\u9759\u6001\u6210\u5458\u8ba9\u6211\u4eec\u770b\u5230\u7c7b\u4f5c\u4e3a\u4e00\u4e2a\u6574\u4f53\u7684\u7edf\u4e00\u6027\u3002\u53ea\u6709\u4e24\u8005\u7ed3\u5408\uff0c\u624d\u80fd\u6784\u5efa\u51fa\u65e2\u7075\u6d3b\u53c8\u4e00\u81f4\u7684\u8f6f\u4ef6\u7cfb\u7edf\u3002<\/p>\n\n\n\n<p>\u7b2c\u56db\u5341\u4e03\u8bfe\uff1a\u9759\u6001\u6210\u5458\u4e0e\u5b9e\u4f8b\u6210\u5458\uff01\u5b8c<\/p>\n\n\n\n<h1 class=\"wp-block-heading\">\u7b2c\u56db\u5341\u516b\u8bfe\uff1athis\/self\u5173\u952e\u5b57 &#8211; \u5bf9\u8c61\u81ea\u6211\u7684\u54f2\u5b66<\/h1>\n\n\n\n<h2 class=\"wp-block-heading\">\u524d\u8a00\uff1a\u5bf9\u8c61\u7684\u81ea\u6211\u610f\u8bc6<\/h2>\n\n\n\n<p>\u5728\u9762\u5411\u5bf9\u8c61\u7f16\u7a0b\u4e2d\uff0c<code>self<\/code>\uff08Python\uff09\u6216<code>this<\/code>\uff08Java\/C++\uff09\u4e0d\u4ec5\u662f\u4e00\u4e2a\u8bed\u6cd5\u5173\u952e\u5b57\uff0c\u66f4\u662f\u5bf9\u8c61<strong>\u81ea\u6211\u610f\u8bc6<\/strong>\u7684\u4f53\u73b0\u3002\u5b83\u4ee3\u8868\u4e86\u5bf9\u8c61\u5bf9\u81ea\u8eab\u7684\u5f15\u7528\uff0c\u662f\u5bf9\u8c61\u4e0e\u81ea\u8eab\u8fdb\u884c\u5bf9\u8bdd\u7684\u6865\u6881\u3002<\/p>\n\n\n\n<p>\u4eca\u5929\uff0c\u6211\u4eec\u5c06\u6df1\u5165\u63a2\u8ba8<code>self<\/code>\/<code>this<\/code>\u7684\u672c\u8d28\uff0c\u7406\u89e3\u4e3a\u4ec0\u4e48\u9700\u8981\u5b83\uff0c\u4ee5\u53ca\u5982\u4f55\u6b63\u786e\u5730\u5728\u65b9\u6cd5\u4e2d\u4f7f\u7528\u5b83\u3002\u8fd9\u4e0d\u4ec5\u662f\u4e00\u4e2a\u6280\u672f\u95ee\u9898\uff0c\u66f4\u662f\u4e00\u4e2a\u5173\u4e8e\u5bf9\u8c61\u8eab\u4efd\u548c\u5b58\u5728\u6027\u7684\u54f2\u5b66\u601d\u8003\u3002<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">\u7b2c\u4e00\u90e8\u5206\uff1a\u4e3a\u4ec0\u4e48\u9700\u8981self\/this\uff1f<\/h2>\n\n\n\n<h3 class=\"wp-block-heading\">1.1 \u5bf9\u8c61\u7684\u5b58\u5728\u6027\u8bc1\u660e<\/h3>\n\n\n\n<p>\u5728\u54f2\u5b66\u4e2d\uff0c&#8221;\u6211\u601d\u6545\u6211\u5728&#8221;\u786e\u7acb\u4e86\u4e3b\u4f53\u7684\u5b58\u5728\u6027\u3002\u5728\u9762\u5411\u5bf9\u8c61\u7f16\u7a0b\u4e2d\uff0c&#8221;\u6211\u5f15\u6545\u6211\u5728&#8221;\u2014\u2014\u5bf9\u8c61\u901a\u8fc7<code>self<\/code>\/<code>this<\/code>\u5f15\u7528\u81ea\u8eab\uff0c\u786e\u7acb\u4e86\u81ea\u5df1\u7684\u5b58\u5728\u548c\u8eab\u4efd\u3002<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code># ============================================================================\n# self\uff1a\u5bf9\u8c61\u7684\u5b58\u5728\u6027\u8bc1\u660e\n# ============================================================================\n\nclass Philosopher:\n    \"\"\"\u54f2\u5b66\u5bb6\u7c7b\uff1a\u63a2\u8ba8\u81ea\u6211\u610f\u8bc6\"\"\"\n\n    def __init__(self, name):\n        # self\u8ba9\u5bf9\u8c61\u77e5\u9053\"\u6211\u662f\u8c01\"\n        self.name = name\n        self.thoughts = &#91;]\n\n    def think(self, thought):\n        \"\"\"\u601d\u8003\uff1a\u901a\u8fc7self\u8bb0\u5f55\u601d\u60f3\"\"\"\n        # \u6ca1\u6709self\uff0c\u5bf9\u8c61\u65e0\u6cd5\u77e5\u9053\"\u8fd9\u662f\u6211\u7684\u601d\u60f3\"\n        self.thoughts.append({\n            'content': thought,\n            'time': self._get_current_time(),\n            'thinker': self.name  # \u81ea\u6211\u5f15\u7528\n        })\n        print(f\"{self.name} \u601d\u8003: {thought}\")\n\n    def reflect(self):\n        \"\"\"\u53cd\u601d\uff1a\u901a\u8fc7self\u8bbf\u95ee\u81ea\u8eab\u72b6\u6001\"\"\"\n        # self\u4f7f\u5f97\u5bf9\u8c61\u80fd\u591f\u53cd\u601d\u81ea\u5df1\u7684\u601d\u60f3\n        if not self.thoughts:\n            return f\"{self.name} \u8fd8\u6ca1\u6709\u4efb\u4f55\u601d\u60f3\"\n\n        reflection = f\"{self.name} \u7684\u53cd\u601d:\\n\"\n        for i, thought in enumerate(self.thoughts, 1):\n            reflection += f\"  \u601d\u60f3{i}: {thought&#91;'content']} ({thought&#91;'time']})\\n\"\n        return reflection\n\n    def _get_current_time(self):\n        \"\"\"\u83b7\u53d6\u5f53\u524d\u65f6\u95f4\uff08\u79c1\u6709\u65b9\u6cd5\uff09\"\"\"\n        import datetime\n        return datetime.datetime.now().strftime(\"%H:%M:%S\")\n\n    def ask_question(self):\n        \"\"\"\u63d0\u95ee\uff1a\u5bf9\u8c61\u7684\u81ea\u6211\u5bf9\u8bdd\"\"\"\n        # self\u4f7f\u5f97\u5bf9\u8c61\u80fd\u591f\u95ee\u5173\u4e8e\u81ea\u5df1\u7684\u95ee\u9898\n        questions = &#91;\n            f\"\u6211\u662f\u8c01\uff1f\u7b54\u6848: \u6211\u662f{self.name}\",\n            f\"\u6211\u6709\u591a\u5c11\u601d\u60f3\uff1f\u7b54\u6848: {len(self.thoughts)}\u4e2a\",\n            f\"\u6211\u5b58\u5728\u5417\uff1f\u7b54\u6848: \u662f\u7684\uff0c\u6211\u901a\u8fc7self\u5f15\u7528\u81ea\u5df1\"\n        ]\n        return questions\n\n# \u521b\u5efa\u4e00\u4e2a\u54f2\u5b66\u5bb6\nsocrates = Philosopher(\"\u82cf\u683c\u62c9\u5e95\")\n\n# \u601d\u8003\nsocrates.think(\"\u8ba4\u8bc6\u4f60\u81ea\u5df1\")\nsocrates.think(\"\u6211\u77e5\u9053\u6211\u4e00\u65e0\u6240\u77e5\")\n\n# \u53cd\u601d\uff08\u81ea\u6211\u610f\u8bc6\u7684\u8868\u73b0\uff09\nprint(\"\\n\" + socrates.reflect())\n\n# \u81ea\u6211\u63d0\u95ee\nprint(\"\\n\u81ea\u6211\u63d0\u95ee:\")\nfor question in socrates.ask_question():\n    print(f\"  {question}\")\n\n# \u6bd4\u8f83\u4e24\u4e2a\u5bf9\u8c61\nplato = Philosopher(\"\u67cf\u62c9\u56fe\")\nprint(f\"\\n{socrates.name} \u662f {plato.name} \u5417\uff1f {socrates is plato}\")\nprint(f\"{socrates.name} \u7684self\u5730\u5740: {id(socrates)}\")\nprint(f\"{plato.name} \u7684self\u5730\u5740: {id(plato)}\")<\/code><\/pre>\n\n\n\n<h3 class=\"wp-block-heading\">1.2 \u4ece\u51fd\u6570\u5230\u65b9\u6cd5\u7684\u8f6c\u53d8<\/h3>\n\n\n\n<p>\u7406\u89e3<code>self<\/code>\/<code>this<\/code>\u7684\u5173\u952e\u5728\u4e8e\u533a\u5206<strong>\u51fd\u6570<\/strong>\u548c<strong>\u65b9\u6cd5<\/strong>\u3002\u65b9\u6cd5\u662f\u7ed1\u5b9a\u5230\u5bf9\u8c61\u4e0a\u7684\u51fd\u6570\uff0c\u800c<code>self<\/code>\/<code>this<\/code>\u5c31\u662f\u8fd9\u79cd\u7ed1\u5b9a\u7684\u4f53\u73b0\u3002<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code># ============================================================================\n# \u51fd\u6570 vs \u65b9\u6cd5\uff1aself\u7684\u4f5c\u7528\n# ============================================================================\n\ndef stand_alone_function(person_name, message):\n    \"\"\"\u72ec\u7acb\u51fd\u6570\uff1a\u6ca1\u6709\u7ed1\u5b9a\u5230\u4efb\u4f55\u5bf9\u8c61\"\"\"\n    return f\"{person_name}\u8bf4: {message}\"\n\nclass Person:\n    \"\"\"\u4eba\u7c7b\uff1a\u5c55\u793a\u65b9\u6cd5\u4e0e\u51fd\u6570\u7684\u533a\u522b\"\"\"\n\n    def __init__(self, name):\n        self.name = name\n\n    # \u5b9e\u4f8b\u65b9\u6cd5\uff1a\u7ed1\u5b9a\u5230\u5bf9\u8c61\n    def say(self, message):\n        \"\"\"\u5b9e\u4f8b\u65b9\u6cd5\uff1a\u901a\u8fc7self\u8bbf\u95ee\u5bf9\u8c61\u5c5e\u6027\"\"\"\n        return f\"{self.name}\u8bf4: {message}\"\n\n    # \u9759\u6001\u65b9\u6cd5\uff1a\u4e0d\u7ed1\u5b9a\u5230\u5bf9\u8c61\n    @staticmethod\n    def static_say(name, message):\n        \"\"\"\u9759\u6001\u65b9\u6cd5\uff1a\u7c7b\u4f3c\u4e8e\u72ec\u7acb\u51fd\u6570\"\"\"\n        return f\"{name}\u8bf4: {message}\"\n\nprint(\"=== \u51fd\u6570 vs \u65b9\u6cd5 ===\")\n\n# \u4f7f\u7528\u72ec\u7acb\u51fd\u6570\nprint(\"1. \u4f7f\u7528\u72ec\u7acb\u51fd\u6570:\")\nprint(stand_alone_function(\"\u5f20\u4e09\", \"\u4f60\u597d\uff01\"))\n\n# \u521b\u5efaPerson\u5b9e\u4f8b\nzhang = Person(\"\u5f20\u4e09\")\n\nprint(\"\\n2. \u4f7f\u7528\u5b9e\u4f8b\u65b9\u6cd5:\")\n# \u5b9e\u4f8b\u65b9\u6cd5\u8c03\u7528\uff1a\u81ea\u52a8\u4f20\u9012self\nprint(zhang.say(\"\u4f60\u597d\uff01\"))\n\n# \u5b9e\u9645\u4e0a\uff0c\u65b9\u6cd5\u662f\u7ed1\u5b9a\u5230\u5b9e\u4f8b\u7684\u51fd\u6570\nprint(\"\\n3. \u65b9\u6cd5\u7684\u672c\u8d28:\")\nprint(f\"zhang.say\u7684\u7c7b\u578b: {type(zhang.say)}\")\nprint(f\"Person.say\u7684\u7c7b\u578b: {type(Person.say)}\")\n\n# \u624b\u52a8\u8c03\u7528\uff08\u5c55\u793aself\u7684\u4f20\u9012\uff09\nprint(\"\\n4. \u624b\u52a8\u4f20\u9012self:\")\n# \u8fd9\u76f8\u5f53\u4e8e zhang.say(\"\u4f60\u597d\uff01\")\nmethod_as_function = Person.say\nprint(method_as_function(zhang, \"\u4f60\u597d\uff01\"))\n\nprint(\"\\n5. \u9759\u6001\u65b9\u6cd5\u5bf9\u6bd4:\")\n# \u9759\u6001\u65b9\u6cd5\u4e0d\u63a5\u6536self\nprint(Person.static_say(\"\u5f20\u4e09\", \"\u9759\u6001\u65b9\u6cd5\"))\nprint(zhang.static_say(\"\u5f20\u4e09\", \"\u9759\u6001\u65b9\u6cd5\"))  # \u4e0d\u63a8\u8350\uff0c\u4f46\u53ef\u4ee5\n\n# \u5bf9\u6bd4\u5185\u5b58\u5730\u5740\nprint(\"\\n6. \u65b9\u6cd5\u7ed1\u5b9a\u9a8c\u8bc1:\")\nprint(f\"\u72ec\u7acb\u51fd\u6570\u5730\u5740: {id(stand_alone_function)}\")\nprint(f\"zhang.say\u65b9\u6cd5\u5730\u5740: {id(zhang.say)}\")\n\nli = Person(\"\u674e\u56db\")\nprint(f\"li.say\u65b9\u6cd5\u5730\u5740: {id(li.say)}\")\nprint(f\"\u4e24\u4e2a\u5b9e\u4f8b\u7684say\u65b9\u6cd5\u76f8\u540c\u5417? {zhang.say is li.say}\")  # \u4e0d\u540c\u5bf9\u8c61\uff0c\u76f8\u540c\u65b9\u6cd5\nprint(f\"\u4f46\u5b83\u4eec\u662f\u540c\u4e00\u4e2a\u51fd\u6570\u5417? {zhang.say.__func__ is li.say.__func__}\")  # \u662f\u7684\n\n# \u5c55\u793a\u7ed1\u5b9a\u65b9\u6cd5\nprint(\"\\n7. \u7ed1\u5b9a\u65b9\u6cd5\u7684\u5c5e\u6027:\")\nprint(f\"zhang.say.__self__: {zhang.say.__self__}\")  # \u7ed1\u5b9a\u7684\u5b9e\u4f8b\nprint(f\"zhang.say.__self__.name: {zhang.say.__self__.name}\")<\/code><\/pre>\n\n\n\n<h3 class=\"wp-block-heading\">1.3 \u591a\u8bed\u8a00\u89c6\u89d2\u4e2d\u7684self\/this<\/h3>\n\n\n\n<p>\u4e0d\u540c\u8bed\u8a00\u5b9e\u73b0<code>self<\/code>\/<code>this<\/code>\u7684\u65b9\u5f0f\u4e0d\u540c\uff0c\u4f46\u6838\u5fc3\u6982\u5ff5\u662f\u4e00\u81f4\u7684\uff1a\u4e3a\u5bf9\u8c61\u63d0\u4f9b\u4e00\u4e2a\u5f15\u7528\u81ea\u8eab\u7684\u6307\u9488\u3002<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code># ============================================================================\n# \u591a\u8bed\u8a00\u4e2d\u7684self\/this\u5bf9\u6bd4\n# ============================================================================\n\nclass PythonClass:\n    \"\"\"Python\u4e2d\u7684self\"\"\"\n\n    def __init__(self, value):\n        self.value = value  # \u5fc5\u987b\u663e\u5f0f\u4f7f\u7528self\n\n    def show(self):\n        \"\"\"Python\u65b9\u6cd5\uff1a\u663e\u5f0fself\u53c2\u6570\"\"\"\n        print(f\"Python: self.value = {self.value}\")\n        print(f\"Python: self is {self}\")\n        print(f\"Python: self id = {id(self)}\")\n\n# Java\u4f2a\u4ee3\u7801\u5bf9\u6bd4\n\"\"\"\n\/\/ Java\u4e2d\u7684this\npublic class JavaClass {\n    private int value;\n\n    public JavaClass(int value) {\n        this.value = value;  \/\/ \u4f7f\u7528this\u533a\u5206\u53c2\u6570\u548c\u5b57\u6bb5\n    }\n\n    public void show() {\n        System.out.println(\"Java: this.value = \" + this.value);\n        System.out.println(\"Java: this = \" + this);\n    }\n}\n\"\"\"\n\n# C++\u4f2a\u4ee3\u7801\u5bf9\u6bd4\n\"\"\"\n\/\/ C++\u4e2d\u7684this\nclass CppClass {\nprivate:\n    int value;\n\npublic:\n    CppClass(int value) {\n        this-&gt;value = value;  \/\/ \u4f7f\u7528this\u6307\u9488\n    }\n\n    void show() {\n        std::cout &lt;&lt; \"C++: this-&gt;value = \" &lt;&lt; this-&gt;value &lt;&lt; std::endl;\n        std::cout &lt;&lt; \"C++: this = \" &lt;&lt; this &lt;&lt; std::endl;\n    }\n};\n\"\"\"\n\n# JavaScript\u4f2a\u4ee3\u7801\u5bf9\u6bd4\n\"\"\"\n\/\/ JavaScript\u4e2d\u7684this\uff08\u590d\u6742\u5f97\u591a\uff09\nclass JavaScriptClass {\n    constructor(value) {\n        this.value = value;  \/\/ this\u53d6\u51b3\u4e8e\u8c03\u7528\u4e0a\u4e0b\u6587\n    }\n\n    show() {\n        console.log(`JavaScript: this.value = ${this.value}`);\n        console.log(`JavaScript: this =`, this);\n    }\n}\n\"\"\"\n\nprint(\"=== \u591a\u8bed\u8a00\u4e2d\u7684self\/this ===\")\n\n# Python\u793a\u4f8b\nobj = PythonClass(42)\nobj.show()\n\nprint(\"\\n\u5173\u952e\u533a\u522b\u603b\u7ed3:\")\nprint(\"1. Python: \u663e\u5f0fself\u53c2\u6570\uff0c\u7ea6\u5b9a\u4fd7\u6210\u547d\u540d\u4e3aself\")\nprint(\"2. Java: \u9690\u5f0fthis\u5f15\u7528\uff0c\u53ef\u7701\u7565\u4f46\u6709\u65f6\u5fc5\u987b\u4f7f\u7528\")\nprint(\"3. C++: \u9690\u5f0fthis\u6307\u9488\uff0c\u901a\u8fc7-&gt;\u8bbf\u95ee\u6210\u5458\")\nprint(\"4. JavaScript: this\u7ed1\u5b9a\u590d\u6742\uff0c\u53d6\u51b3\u4e8e\u8c03\u7528\u65b9\u5f0f\")\nprint(\"5. C#: \u7c7b\u4f3cJava\uff0c\u4f46\u66f4\u4e25\u683c\")<\/code><\/pre>\n\n\n\n<h2 class=\"wp-block-heading\">\u7b2c\u4e8c\u90e8\u5206\uff1aself\/this\u7684\u6b63\u786e\u4f7f\u7528<\/h2>\n\n\n\n<h3 class=\"wp-block-heading\">2.1 \u8bbf\u95ee\u5b9e\u4f8b\u53d8\u91cf<\/h3>\n\n\n\n<p><code>self<\/code>\/<code>this<\/code>\u6700\u57fa\u672c\u7684\u7528\u9014\u662f\u8bbf\u95ee\u5bf9\u8c61\u7684\u5b9e\u4f8b\u53d8\u91cf\uff0c\u533a\u5206\u5c40\u90e8\u53d8\u91cf\u548c\u5bf9\u8c61\u5c5e\u6027\u3002<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code># ============================================================================\n# \u4f7f\u7528self\u8bbf\u95ee\u5b9e\u4f8b\u53d8\u91cf\n# ============================================================================\n\nclass BankAccount:\n    \"\"\"\u94f6\u884c\u8d26\u6237\uff1a\u5c55\u793aself\u7684\u6b63\u786e\u4f7f\u7528\"\"\"\n\n    def __init__(self, account_holder, initial_balance=0):\n        # \u4f7f\u7528self.attribute\u5b9a\u4e49\u5b9e\u4f8b\u53d8\u91cf\n        self.account_holder = account_holder\n        self.balance = initial_balance\n        self.transaction_count = 0\n        self.is_active = True\n\n    def deposit(self, amount):\n        \"\"\"\u5b58\u6b3e\uff1a\u4f7f\u7528self\u8bbf\u95ee\u548c\u4fee\u6539\u5b9e\u4f8b\u53d8\u91cf\"\"\"\n        if not self.is_active:\n            print(\"\u8d26\u6237\u5df2\u88ab\u51bb\u7ed3\")\n            return False\n\n        if amount &lt;= 0:\n            print(\"\u5b58\u6b3e\u91d1\u989d\u5fc5\u987b\u5927\u4e8e0\")\n            return False\n\n        # \u4f7f\u7528self.balance\u8bbf\u95ee\u5b9e\u4f8b\u53d8\u91cf\n        self.balance += amount\n        self.transaction_count += 1\n\n        # \u8c03\u7528\u5176\u4ed6\u65b9\u6cd5\u4e5f\u9700\u8981self\n        self._record_transaction(\"\u5b58\u6b3e\", amount)\n        self._update_activity()\n\n        print(f\"{self.account_holder} \u5b58\u6b3e {amount}\uff0c\u4f59\u989d {self.balance}\")\n        return True\n\n    def withdraw(self, amount):\n        \"\"\"\u53d6\u6b3e\uff1a\u4f7f\u7528self\u8fdb\u884c\u6761\u4ef6\u5224\u65ad\"\"\"\n        if not self.is_active:\n            print(\"\u8d26\u6237\u5df2\u88ab\u51bb\u7ed3\")\n            return False\n\n        if amount &lt;= 0:\n            print(\"\u53d6\u6b3e\u91d1\u989d\u5fc5\u987b\u5927\u4e8e0\")\n            return False\n\n        # \u8bbf\u95ee\u5b9e\u4f8b\u53d8\u91cf\u8fdb\u884c\u4e1a\u52a1\u903b\u8f91\n        if amount &gt; self.balance:\n            print(f\"\u4f59\u989d\u4e0d\u8db3\uff0c\u5f53\u524d\u4f59\u989d {self.balance}\")\n            return False\n\n        self.balance -= amount\n        self.transaction_count += 1\n        self._record_transaction(\"\u53d6\u6b3e\", amount)\n        self._update_activity()\n\n        print(f\"{self.account_holder} \u53d6\u6b3e {amount}\uff0c\u4f59\u989d {self.balance}\")\n        return True\n\n    def _record_transaction(self, transaction_type, amount):\n        \"\"\"\u8bb0\u5f55\u4ea4\u6613\uff1a\u79c1\u6709\u65b9\u6cd5\u4e5f\u9700\u8981self\"\"\"\n        # \u5373\u4f7f\u6ca1\u6709\u53c2\u6570\uff0c\u4e5f\u9700\u8981self\u6765\u8bbf\u95ee\u5b9e\u4f8b\u53d8\u91cf\n        print(f\"\u8bb0\u5f55\u4ea4\u6613: {transaction_type} {amount}\")\n        # \u5728\u5b9e\u9645\u7cfb\u7edf\u4e2d\uff0c\u8fd9\u91cc\u4f1a\u5199\u5165\u6570\u636e\u5e93\u6216\u6587\u4ef6\n\n    def _update_activity(self):\n        \"\"\"\u66f4\u65b0\u8d26\u6237\u6d3b\u52a8\u72b6\u6001\"\"\"\n        if self.transaction_count &gt; 100:\n            self.is_active = False\n            print(f\"\u8b66\u544a: {self.account_holder} \u7684\u4ea4\u6613\u6b21\u6570\u5f02\u5e38\")\n\n    def get_summary(self):\n        \"\"\"\u83b7\u53d6\u8d26\u6237\u6458\u8981\uff1a\u53ea\u8bfb\u8bbf\u95ee\"\"\"\n        return {\n            'account_holder': self.account_holder,\n            'balance': self.balance,\n            'transaction_count': self.transaction_count,\n            'is_active': self.is_active\n        }\n\n    def apply_interest(self, rate):\n        \"\"\"\u5e94\u7528\u5229\u606f\uff1a\u5e26\u53c2\u6570\u7684\u65b9\u6cd5\"\"\"\n        # \u5c40\u90e8\u53d8\u91cfinterest\u4e0e\u5b9e\u4f8b\u53d8\u91cfself.balance\u533a\u5206\n        interest = self.balance * rate\n        self.balance += interest\n        print(f\"\u5e94\u7528\u5229\u606f: {interest}\uff0c\u65b0\u4f59\u989d: {self.balance}\")\n        return interest\n\nprint(\"=== self\u8bbf\u95ee\u5b9e\u4f8b\u53d8\u91cf ===\")\n\n# \u521b\u5efa\u8d26\u6237\naccount = BankAccount(\"\u5f20\u4e09\", 1000)\n\n# \u64cd\u4f5c\u8d26\u6237\naccount.deposit(500)\naccount.withdraw(200)\naccount.apply_interest(0.05)\n\n# \u83b7\u53d6\u8d26\u6237\u4fe1\u606f\nsummary = account.get_summary()\nprint(f\"\\n\u8d26\u6237\u6458\u8981:\")\nfor key, value in summary.items():\n    print(f\"  {key}: {value}\")\n\n# \u5e38\u89c1\u9519\u8bef\u793a\u4f8b\nprint(\"\\n=== \u5e38\u89c1\u9519\u8bef ===\")\n\nclass WrongAccount:\n    \"\"\"\u9519\u8bef\u793a\u8303\uff1a\u4e0d\u4f7f\u7528self\"\"\"\n\n    def __init__(self, name, balance):\n        # \u9519\u8bef\uff1a\u521b\u5efa\u7684\u662f\u5c40\u90e8\u53d8\u91cf\uff0c\u4e0d\u662f\u5b9e\u4f8b\u53d8\u91cf\n        name = name  # \u8fd9\u53ea\u662f\u4e00\u4e2a\u5c40\u90e8\u53d8\u91cf\uff01\n        balance = balance  # \u8fd9\u53ea\u662f\u4e00\u4e2a\u5c40\u90e8\u53d8\u91cf\uff01\n        # \u6b63\u786e\u7684\u5e94\u8be5\u662f self.name = name\n\n    def check_balance(self):\n        \"\"\"\u9519\u8bef\uff1a\u65e0\u6cd5\u8bbf\u95ee\u4e0d\u5b58\u5728\u7684\u5b9e\u4f8b\u53d8\u91cf\"\"\"\n        try:\n            print(f\"\u4f59\u989d: {self.balance}\")  # AttributeError!\n        except AttributeError as e:\n            print(f\"\u9519\u8bef: {e}\")\n\nwrong = WrongAccount(\"\u674e\u56db\", 1000)\nwrong.check_balance()<\/code><\/pre>\n\n\n\n<h3 class=\"wp-block-heading\">2.2 \u8c03\u7528\u5176\u4ed6\u65b9\u6cd5<\/h3>\n\n\n\n<p>\u5728\u5bf9\u8c61\u7684\u65b9\u6cd5\u4e2d\uff0c\u901a\u8fc7<code>self<\/code>\u8c03\u7528\u5176\u4ed6\u65b9\u6cd5\uff0c\u5b9e\u73b0\u5bf9\u8c61\u5185\u90e8\u7684\u534f\u4f5c\u3002<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code># ============================================================================\n# \u901a\u8fc7self\u8c03\u7528\u5176\u4ed6\u65b9\u6cd5\n# ============================================================================\n\nclass SmartHome:\n    \"\"\"\u667a\u80fd\u5bb6\u5c45\uff1a\u5c55\u793a\u65b9\u6cd5\u95f4\u7684\u534f\u4f5c\"\"\"\n\n    def __init__(self, name):\n        self.name = name\n        self.lights_on = False\n        self.temperature = 22  # \u6444\u6c0f\u5ea6\n        self.security_armed = False\n        self.energy_usage = 0\n\n    def turn_on_lights(self):\n        \"\"\"\u5f00\u706f\uff1a\u4fee\u6539\u72b6\u6001\u5e76\u8bb0\u5f55\u80fd\u8017\"\"\"\n        if not self.lights_on:\n            self.lights_on = True\n            self._increase_energy_usage(10)  # \u8c03\u7528\u5176\u4ed6\u65b9\u6cd5\n            self._log_event(\"\u706f\u5149\u5df2\u6253\u5f00\")\n            return True\n        return False\n\n    def turn_off_lights(self):\n        \"\"\"\u5173\u706f\"\"\"\n        if self.lights_on:\n            self.lights_on = False\n            self._log_event(\"\u706f\u5149\u5df2\u5173\u95ed\")\n            return True\n        return False\n\n    def set_temperature(self, temp):\n        \"\"\"\u8bbe\u7f6e\u6e29\u5ea6\uff1a\u590d\u6742\u7684\u4e1a\u52a1\u903b\u8f91\"\"\"\n        old_temp = self.temperature\n\n        # \u9a8c\u8bc1\u6e29\u5ea6\u8303\u56f4\n        if temp &lt; 10 or temp &gt; 30:\n            self._log_event(f\"\u65e0\u6548\u7684\u6e29\u5ea6\u8bbe\u7f6e: {temp}\")\n            return False\n\n        self.temperature = temp\n\n        # \u6839\u636e\u6e29\u5ea6\u53d8\u5316\u8c03\u6574\u80fd\u8017\n        if temp &gt; old_temp:\n            energy_increase = (temp - old_temp) * 5\n            self._increase_energy_usage(energy_increase)\n            self._log_event(f\"\u6e29\u5ea6\u4ece{old_temp}\u00b0C\u5347\u9ad8\u5230{temp}\u00b0C\")\n        elif temp &lt; old_temp:\n            energy_increase = (old_temp - temp) * 3\n            self._increase_energy_usage(energy_increase)\n            self._log_event(f\"\u6e29\u5ea6\u4ece{old_temp}\u00b0C\u964d\u4f4e\u5230{temp}\u00b0C\")\n\n        # \u5982\u679c\u6e29\u5ea6\u8fc7\u9ad8\uff0c\u81ea\u52a8\u5f00\u7a7a\u8c03\n        if temp &gt; 25 and not self._is_cooling_on():\n            self._turn_on_cooling()\n\n        return True\n\n    def arm_security(self):\n        \"\"\"\u5e03\u9632\"\"\"\n        if not self.security_armed:\n            self.security_armed = True\n            self._log_event(\"\u5b89\u9632\u7cfb\u7edf\u5df2\u5e03\u9632\")\n\n            # \u5e03\u9632\u65f6\u81ea\u52a8\u5173\u706f\n            if self.lights_on:\n                self.turn_off_lights()  # \u8c03\u7528\u53e6\u4e00\u4e2a\u5b9e\u4f8b\u65b9\u6cd5\n\n            return True\n        return False\n\n    def disarm_security(self):\n        \"\"\"\u64a4\u9632\"\"\"\n        if self.security_armed:\n            self.security_armed = False\n            self._log_event(\"\u5b89\u9632\u7cfb\u7edf\u5df2\u64a4\u9632\")\n            return True\n        return False\n\n    def get_status(self):\n        \"\"\"\u83b7\u53d6\u72b6\u6001\uff1a\u8c03\u7528\u591a\u4e2a\u65b9\u6cd5\u6536\u96c6\u4fe1\u606f\"\"\"\n        status = {\n            'name': self.name,\n            'lights': '\u5f00' if self.lights_on else '\u5173',\n            'temperature': f\"{self.temperature}\u00b0C\",\n            'security': '\u5df2\u5e03\u9632' if self.security_armed else '\u672a\u5e03\u9632',\n            'energy_usage': f\"{self.energy_usage}\u5355\u4f4d\",\n            'is_cooling_on': self._is_cooling_on()\n        }\n        return status\n\n    # \u79c1\u6709\u65b9\u6cd5\uff1a\u5185\u90e8\u5b9e\u73b0\u7ec6\u8282\n    def _increase_energy_usage(self, amount):\n        \"\"\"\u589e\u52a0\u80fd\u8017\"\"\"\n        self.energy_usage += amount\n\n    def _log_event(self, event):\n        \"\"\"\u8bb0\u5f55\u4e8b\u4ef6\"\"\"\n        import datetime\n        timestamp = datetime.datetime.now().strftime(\"%Y-%m-%d %H:%M:%S\")\n        print(f\"&#91;{timestamp}] {self.name}: {event}\")\n\n    def _is_cooling_on(self):\n        \"\"\"\u68c0\u67e5\u7a7a\u8c03\u662f\u5426\u5f00\u542f\uff08\u6a21\u62df\uff09\"\"\"\n        return self.temperature &gt; 25  # \u7b80\u5316\u903b\u8f91\n\n    def _turn_on_cooling(self):\n        \"\"\"\u6253\u5f00\u7a7a\u8c03\"\"\"\n        self._log_event(\"\u7a7a\u8c03\u5df2\u81ea\u52a8\u5f00\u542f\")\n        self._increase_energy_usage(50)\n\nprint(\"=== \u901a\u8fc7self\u8c03\u7528\u65b9\u6cd5 ===\")\n\n# \u521b\u5efa\u667a\u80fd\u5bb6\u5c45\nhome = SmartHome(\"\u6211\u7684\u667a\u80fd\u5bb6\u5c45\")\n\n# \u64cd\u4f5c\u5bb6\u5c45\nprint(\"1. \u57fa\u672c\u64cd\u4f5c:\")\nhome.turn_on_lights()\nhome.set_temperature(24)\nhome.arm_security()\n\nprint(\"\\n2. \u72b6\u6001\u67e5\u770b:\")\nstatus = home.get_status()\nfor key, value in status.items():\n    print(f\"  {key}: {value}\")\n\nprint(\"\\n3. \u66f4\u591a\u64cd\u4f5c:\")\nhome.set_temperature(27)  # \u8fd9\u5c06\u89e6\u53d1\u7a7a\u8c03\u5f00\u542f\nhome.disarm_security()\n\nprint(\"\\n4. \u6700\u7ec8\u72b6\u6001:\")\nfinal_status = home.get_status()\nfor key, value in final_status.items():\n    print(f\"  {key}: {value}\")\n\n# \u5c55\u793a\u65b9\u6cd5\u8c03\u7528\u94fe\nprint(\"\\n5. \u65b9\u6cd5\u8c03\u7528\u94fe\u5206\u6790:\")\nprint(\"  home.set_temperature(27) \u8c03\u7528:\")\nprint(\"    - self._increase_energy_usage()\")\nprint(\"    - self._log_event()\")\nprint(\"    - self._is_cooling_on()\")\nprint(\"    - self._turn_on_cooling()\")\nprint(\"    - self._increase_energy_usage() (\u518d\u6b21)\")\nprint(\"    - self._log_event() (\u518d\u6b21)\")<\/code><\/pre>\n\n\n\n<h3 class=\"wp-block-heading\">2.3 \u5728\u6784\u9020\u51fd\u6570\u4e2d\u4f7f\u7528self<\/h3>\n\n\n\n<p>\u6784\u9020\u51fd\u6570(<code>__init__<\/code>)\u662f\u5bf9\u8c61\u751f\u547d\u7684\u8d77\u70b9\uff0c\u5728\u8fd9\u91cc\u6b63\u786e\u4f7f\u7528<code>self<\/code>\u521d\u59cb\u5316\u5bf9\u8c61\u72b6\u6001\u81f3\u5173\u91cd\u8981\u3002<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code># ============================================================================\n# \u5728\u6784\u9020\u51fd\u6570\u4e2d\u4f7f\u7528self\n# ============================================================================\n\nclass Student:\n    \"\"\"\u5b66\u751f\u7c7b\uff1a\u5c55\u793a\u6784\u9020\u51fd\u6570\u4e2dself\u7684\u4f7f\u7528\"\"\"\n\n    def __init__(self, name, student_id, major):\n        # 1. \u521d\u59cb\u5316\u57fa\u672c\u5c5e\u6027\n        self.name = name\n        self.student_id = student_id\n        self.major = major\n\n        # 2. \u521d\u59cb\u5316\u9ed8\u8ba4\u503c\n        self.enrolled_courses = &#91;]  # \u7a7a\u5217\u8868\n        self.gpa = 0.0\n        self.credits_earned = 0\n        self.is_graduated = False\n\n        # 3. \u8c03\u7528\u521d\u59cb\u5316\u65b9\u6cd5\n        self._initialize_academic_record()\n        self._generate_email()\n\n        # 4. \u9a8c\u8bc1\u5e76\u4fee\u6b63\u6570\u636e\n        self._validate_and_correct_data()\n\n        print(f\"\u5b66\u751f {self.name} (ID: {self.student_id}) \u5df2\u521b\u5efa\")\n\n    def _initialize_academic_record(self):\n        \"\"\"\u521d\u59cb\u5316\u5b66\u4e1a\u8bb0\u5f55\"\"\"\n        self.academic_record = {\n            'fall_2023': {'courses': &#91;], 'gpa': 0.0},\n            'spring_2024': {'courses': &#91;], 'gpa': 0.0},\n            'fall_2024': {'courses': &#91;], 'gpa': 0.0},\n            'spring_2025': {'courses': &#91;], 'gpa': 0.0}\n        }\n\n    def _generate_email(self):\n        \"\"\"\u751f\u6210\u5b66\u751f\u90ae\u7bb1\"\"\"\n        # \u57fa\u4e8e\u59d3\u540d\u548c\u5b66\u53f7\u751f\u6210\u90ae\u7bb1\n        name_part = self.name.lower().replace(' ', '.')\n        self.email = f\"{name_part}.{self.student_id}@university.edu\"\n\n    def _validate_and_correct_data(self):\n        \"\"\"\u9a8c\u8bc1\u5e76\u4fee\u6b63\u6570\u636e\"\"\"\n        # \u786e\u4fdd\u5b66\u53f7\u662f\u5b57\u7b26\u4e32\n        if not isinstance(self.student_id, str):\n            self.student_id = str(self.student_id)\n\n        # \u786e\u4fdd\u4e13\u4e1a\u540d\u79f0\u9996\u5b57\u6bcd\u5927\u5199\n        if self.major:\n            self.major = self.major.title()\n\n    def enroll_course(self, course_code, course_name, credits):\n        \"\"\"\u9009\u8bfe\"\"\"\n        course = {\n            'code': course_code,\n            'name': course_name,\n            'credits': credits,\n            'grade': None  # \u521d\u59cb\u6ca1\u6709\u6210\u7ee9\n        }\n\n        self.enrolled_courses.append(course)\n        print(f\"{self.name} \u5df2\u9009\u8bfe: {course_code} - {course_name}\")\n\n    def complete_course(self, course_code, grade):\n        \"\"\"\u5b8c\u6210\u8bfe\u7a0b\"\"\"\n        for course in self.enrolled_courses:\n            if course&#91;'code'] == course_code:\n                course&#91;'grade'] = grade\n                self.credits_earned += course&#91;'credits']\n                self._update_gpa()\n                print(f\"{self.name} \u5df2\u5b8c\u6210\u8bfe\u7a0b {course_code}\uff0c\u6210\u7ee9: {grade}\")\n                return True\n        print(f\"\u672a\u627e\u5230\u8bfe\u7a0b: {course_code}\")\n        return False\n\n    def _update_gpa(self):\n        \"\"\"\u66f4\u65b0GPA\"\"\"\n        if not self.enrolled_courses:\n            self.gpa = 0.0\n            return\n\n        total_points = 0\n        total_credits = 0\n\n        for course in self.enrolled_courses:\n            if course&#91;'grade'] is not None:\n                # \u7b80\u5355\u8ba1\u7b97\uff1aA=4.0, B=3.0, C=2.0, D=1.0, F=0.0\n                grade_points = {\n                    'A': 4.0, 'B': 3.0, 'C': 2.0, \n                    'D': 1.0, 'F': 0.0\n                }.get(course&#91;'grade'], 0.0)\n\n                total_points += grade_points * course&#91;'credits']\n                total_credits += course&#91;'credits']\n\n        if total_credits &gt; 0:\n            self.gpa = total_points \/ total_credits\n\n        # \u68c0\u67e5\u662f\u5426\u53ef\u4ee5\u6bd5\u4e1a\n        if self.credits_earned &gt;= 120 and self.gpa &gt;= 2.0:\n            self.is_graduated = True\n            print(f\"\u606d\u559c {self.name} \u5df2\u8fbe\u5230\u6bd5\u4e1a\u8981\u6c42!\")\n\n    def get_transcript(self):\n        \"\"\"\u83b7\u53d6\u6210\u7ee9\u5355\"\"\"\n        transcript = f\"{self.name} \u7684\u6210\u7ee9\u5355\\n\"\n        transcript += f\"\u5b66\u53f7: {self.student_id}\\n\"\n        transcript += f\"\u4e13\u4e1a: {self.major}\\n\"\n        transcript += f\"GPA: {self.gpa:.2f}\\n\"\n        transcript += f\"\u5df2\u83b7\u5b66\u5206: {self.credits_earned}\\n\"\n        transcript += f\"\u6bd5\u4e1a\u72b6\u6001: {'\u5df2\u6bd5\u4e1a' if self.is_graduated else '\u5728\u8bfb'}\\n\"\n        transcript += f\"\u90ae\u7bb1: {self.email}\\n\"\n\n        if self.enrolled_courses:\n            transcript += \"\\n\u8bfe\u7a0b\u5217\u8868:\\n\"\n            for course in self.enrolled_courses:\n                status = f\"\u6210\u7ee9: {course&#91;'grade']}\" if course&#91;'grade'] else \"\u8fdb\u884c\u4e2d\"\n                transcript += (f\"  {course&#91;'code']}: {course&#91;'name']} \"\n                             f\"({course&#91;'credits']}\u5b66\u5206) - {status}\\n\")\n\n        return transcript\n\nprint(\"=== \u6784\u9020\u51fd\u6570\u4e2d\u7684self ===\")\n\n# \u521b\u5efa\u5b66\u751f\nstudent = Student(\"\u5f20\u4e09\", \"2023001\", \"\u8ba1\u7b97\u673a\u79d1\u5b66\")\n\nprint(\"\\n\u5b66\u751f\u4fe1\u606f:\")\nprint(f\"\u59d3\u540d: {student.name}\")\nprint(f\"\u5b66\u53f7: {student.student_id}\")\nprint(f\"\u4e13\u4e1a: {student.major}\")\nprint(f\"\u90ae\u7bb1: {student.email}\")\nprint(f\"GPA: {student.gpa}\")\n\n# \u9009\u8bfe\u548c\u5b8c\u6210\u8bfe\u7a0b\nprint(\"\\n\u9009\u8bfe\u8fc7\u7a0b:\")\nstudent.enroll_course(\"CS101\", \"\u7f16\u7a0b\u57fa\u7840\", 3)\nstudent.enroll_course(\"MATH101\", \"\u9ad8\u7b49\u6570\u5b66\", 4)\nstudent.enroll_course(\"ENG101\", \"\u5927\u5b66\u82f1\u8bed\", 2)\n\nstudent.complete_course(\"CS101\", \"A\")\nstudent.complete_course(\"MATH101\", \"B\")\nstudent.complete_course(\"ENG101\", \"A\")\n\nprint(\"\\n\" + student.get_transcript())\n\n# \u521b\u5efa\u53e6\u4e00\u4e2a\u5b66\u751f\nprint(\"\\n=== \u53e6\u4e00\u4e2a\u5b66\u751f ===\")\nstudent2 = Student(\"\u674e\u56db\", 2023002, \"\u7269\u7406\u5b66\")  # \u6ce8\u610f\uff1a\u5b66\u53f7\u662f\u6570\u5b57\uff0c\u4f1a\u88ab\u8f6c\u6362\u4e3a\u5b57\u7b26\u4e32\nprint(f\"\u5b66\u53f7\u7c7b\u578b: {type(student2.student_id)}\")\nprint(f\"\u4e13\u4e1a: {student2.major}\")  # \u9996\u5b57\u6bcd\u5927\u5199\n\n# \u5c55\u793a\u6784\u9020\u51fd\u6570\u7684\u91cd\u8981\u6027\nprint(\"\\n=== \u6784\u9020\u51fd\u6570\u7684\u91cd\u8981\u6027 ===\")\nprint(\"1. \u786e\u4fdd\u5bf9\u8c61\u521b\u5efa\u540e\u5904\u4e8e\u6709\u6548\u72b6\u6001\")\nprint(\"2. \u521d\u59cb\u5316\u6240\u6709\u5fc5\u8981\u7684\u5b9e\u4f8b\u53d8\u91cf\")\nprint(\"3. \u6267\u884c\u9a8c\u8bc1\u548c\u6570\u636e\u4fee\u6b63\")\nprint(\"4. \u5efa\u7acb\u5bf9\u8c61\u95f4\u7684\u5185\u90e8\u5173\u7cfb\")\nprint(\"5. \u63d0\u4f9b\u4e00\u81f4\u7684\u521d\u59cb\u5316\u63a5\u53e3\")<\/code><\/pre>\n\n\n\n<h2 class=\"wp-block-heading\">\u7b2c\u4e09\u90e8\u5206\uff1a\u9ad8\u7ea7\u5e94\u7528\u4e0e\u7279\u6b8a\u573a\u666f<\/h2>\n\n\n\n<h3 class=\"wp-block-heading\">3.1 self\u4e0e\u7ee7\u627f<\/h3>\n\n\n\n<p>\u5728\u7ee7\u627f\u5173\u7cfb\u4e2d\uff0c<code>self<\/code>\u7684\u52a8\u6001\u7ed1\u5b9a\u7279\u6027\u5b9e\u73b0\u4e86\u591a\u6001\u6027\u3002<code>self<\/code>\u59cb\u7ec8\u6307\u5411\u5b9e\u9645\u7684\u5bf9\u8c61\u5b9e\u4f8b\uff0c\u800c\u4e0d\u662f\u53d8\u91cf\u58f0\u660e\u7684\u7c7b\u578b\u3002<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code># ============================================================================\n# self\u4e0e\u7ee7\u627f\uff1a\u591a\u6001\u6027\u7684\u5b9e\u73b0\n# ============================================================================\n\nclass Shape:\n    \"\"\"\u5f62\u72b6\u57fa\u7c7b\"\"\"\n\n    def __init__(self, name):\n        self.name = name\n        self.color = \"\u9ed1\u8272\"\n\n    def draw(self):\n        \"\"\"\u7ed8\u5236\u5f62\u72b6\"\"\"\n        # self\u6307\u5411\u5b9e\u9645\u5bf9\u8c61\uff0c\u8c03\u7528\u6b63\u786e\u7684\u65b9\u6cd5\n        print(f\"\u7ed8\u5236{self.color}\u7684{self.name}\")\n        self._draw_impl()  # \u591a\u6001\u8c03\u7528\n\n    def _draw_impl(self):\n        \"\"\"\u5b9e\u9645\u7ed8\u5236\u5b9e\u73b0\uff08\u7531\u5b50\u7c7b\u8986\u76d6\uff09\"\"\"\n        print(\"\u8fd9\u662f\u62bd\u8c61\u5f62\u72b6\")\n\n    def set_color(self, color):\n        \"\"\"\u8bbe\u7f6e\u989c\u8272\"\"\"\n        self.color = color\n        print(f\"{self.name}\u7684\u989c\u8272\u5df2\u8bbe\u7f6e\u4e3a{self.color}\")\n\n    def get_info(self):\n        \"\"\"\u83b7\u53d6\u4fe1\u606f\"\"\"\n        # self\u6307\u5411\u5b9e\u9645\u5bf9\u8c61\uff0c\u83b7\u53d6\u5b9e\u9645\u5c5e\u6027\n        return f\"\u5f62\u72b6: {self.name}, \u989c\u8272: {self.color}, \u9762\u79ef: {self.area():.2f}\"\n\n    def area(self):\n        \"\"\"\u8ba1\u7b97\u9762\u79ef\uff08\u62bd\u8c61\u65b9\u6cd5\uff09\"\"\"\n        raise NotImplementedError(\"\u5b50\u7c7b\u5fc5\u987b\u5b9e\u73b0area\u65b9\u6cd5\")\n\nclass Circle(Shape):\n    \"\"\"\u5706\u5f62\"\"\"\n\n    def __init__(self, radius):\n        # \u8c03\u7528\u7236\u7c7b\u6784\u9020\u51fd\u6570\n        super().__init__(\"\u5706\u5f62\")\n        self.radius = radius\n\n    def _draw_impl(self):\n        \"\"\"\u7ed8\u5236\u5706\u5f62\"\"\"\n        print(f\"  \u7ed8\u5236\u534a\u5f84\u4e3a{self.radius}\u7684\u5706\")\n\n    def area(self):\n        \"\"\"\u8ba1\u7b97\u5706\u9762\u79ef\"\"\"\n        import math\n        return math.pi * self.radius ** 2\n\nclass Rectangle(Shape):\n    \"\"\"\u77e9\u5f62\"\"\"\n\n    def __init__(self, width, height):\n        super().__init__(\"\u77e9\u5f62\")\n        self.width = width\n        self.height = height\n\n    def _draw_impl(self):\n        \"\"\"\u7ed8\u5236\u77e9\u5f62\"\"\"\n        print(f\"  \u7ed8\u5236{self.width}\u00d7{self.height}\u7684\u77e9\u5f62\")\n\n    def area(self):\n        \"\"\"\u8ba1\u7b97\u77e9\u5f62\u9762\u79ef\"\"\"\n        return self.width * self.height\n\nclass Triangle(Shape):\n    \"\"\"\u4e09\u89d2\u5f62\"\"\"\n\n    def __init__(self, base, height):\n        super().__init__(\"\u4e09\u89d2\u5f62\")\n        self.base = base\n        self.height = height\n\n    def _draw_impl(self):\n        \"\"\"\u7ed8\u5236\u4e09\u89d2\u5f62\"\"\"\n        print(f\"  \u7ed8\u5236\u5e95{self.base}\u9ad8{self.height}\u7684\u4e09\u89d2\u5f62\")\n\n    def area(self):\n        \"\"\"\u8ba1\u7b97\u4e09\u89d2\u5f62\u9762\u79ef\"\"\"\n        return 0.5 * self.base * self.height\n\nprint(\"=== self\u4e0e\u7ee7\u627f ===\")\n\n# \u521b\u5efa\u4e0d\u540c\u5f62\u72b6\nshapes = &#91;\n    Circle(5),\n    Rectangle(4, 6),\n    Triangle(3, 7)\n]\n\n# \u591a\u6001\u8c03\u7528\nprint(\"1. \u591a\u6001\u7ed8\u5236:\")\nfor shape in shapes:\n    shape.draw()\n    print()\n\nprint(\"2. \u591a\u6001\u8ba1\u7b97\u9762\u79ef:\")\nfor shape in shapes:\n    print(f\"  {shape.get_info()}\")\n\nprint(\"\\n3. \u52a8\u6001\u7ed1\u5b9a\u6f14\u793a:\")\n# self\u603b\u662f\u5f15\u7528\u5b9e\u9645\u5bf9\u8c61\nshape = shapes&#91;0]  # Circle\nprint(f\"shape\u7684\u7c7b\u578b: {type(shape)}\")\nprint(f\"shape\u662fCircle\u5417? {isinstance(shape, Circle)}\")\nprint(f\"shape\u662fShape\u5417? {isinstance(shape, Shape)}\")\n\n# \u5373\u4f7f\u901a\u8fc7\u57fa\u7c7b\u5f15\u7528\uff0cself\u4e5f\u6307\u5411\u5b9e\u9645\u5bf9\u8c61\nprint(\"\\n4. \u901a\u8fc7\u57fa\u7c7b\u5f15\u7528\u8c03\u7528:\")\nshape_ref = shape  # Shape\u7c7b\u578b\u7684\u5f15\u7528\nshape_ref.set_color(\"\u7ea2\u8272\")  # \u5b9e\u9645\u8c03\u7528Circle.set_color\nshape_ref.draw()  # \u5b9e\u9645\u8c03\u7528Circle.draw\n\n# \u65b9\u6cd5\u89e3\u6790\u987a\u5e8f\uff08MRO\uff09\nprint(\"\\n5. \u65b9\u6cd5\u89e3\u6790\u987a\u5e8f:\")\nprint(f\"Circle\u7684MRO: {&#91;cls.__name__ for cls in Circle.__mro__]}\")\n\n# super()\u4e0eself\u7684\u5173\u7cfb\nprint(\"\\n6. super()\u4f7f\u7528:\")\nclass ColoredCircle(Circle):\n    \"\"\"\u5f69\u8272\u5706\u5f62\"\"\"\n\n    def __init__(self, radius, color):\n        # \u8c03\u7528\u7236\u7c7b\u6784\u9020\u51fd\u6570\n        super().__init__(radius)  # \u7b49\u4ef7\u4e8e Circle.__init__(self, radius)\n        # \u518d\u8bbe\u7f6e\u989c\u8272\n        self.color = color\n\n    def draw(self):\n        \"\"\"\u8986\u76d6draw\u65b9\u6cd5\"\"\"\n        print(f\"\u7ed8\u5236\u5f69\u8272\u5706\u5f62:\")\n        # \u8c03\u7528\u7236\u7c7b\u7684draw\u65b9\u6cd5\n        super().draw()  # \u7b49\u4ef7\u4e8e Circle.draw(self)\n        print(f\"  \u7279\u522b\u989c\u8272: {self.color}\")\n\ncolored_circle = ColoredCircle(3, \"\u5f69\u8679\u8272\")\ncolored_circle.draw()<\/code><\/pre>\n\n\n\n<h3 class=\"wp-block-heading\">3.2 \u5d4c\u5957\u7c7b\u4e2d\u7684self<\/h3>\n\n\n\n<p>\u5f53\u7c7b\u5d4c\u5957\u5b9a\u4e49\u65f6\uff0c<code>self<\/code>\u7684\u5c42\u6b21\u6027\u53d8\u5f97\u91cd\u8981\u3002\u5185\u90e8\u7c7b\u7684<code>self<\/code>\u4e0e\u5916\u90e8\u7c7b\u7684<code>self<\/code>\u662f\u4e0d\u540c\u7684\u3002<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code># ============================================================================\n# \u5d4c\u5957\u7c7b\u4e2d\u7684self\n# ============================================================================\n\nclass University:\n    \"\"\"\u5927\u5b66\u7c7b\uff08\u5916\u90e8\u7c7b\uff09\"\"\"\n\n    def __init__(self, name):\n        self.name = name\n        self.departments = &#91;]\n        print(f\"\u521b\u5efa\u5927\u5b66: {self.name}\")\n\n    def create_department(self, dept_name):\n        \"\"\"\u521b\u5efa\u9662\u7cfb\"\"\"\n        dept = self.Department(dept_name, self)  # \u4f20\u9012\u5916\u90e8self\n        self.departments.append(dept)\n        return dept\n\n    def show_info(self):\n        \"\"\"\u663e\u793a\u5927\u5b66\u4fe1\u606f\"\"\"\n        info = f\"\u5927\u5b66: {self.name}\\n\"\n        info += f\"\u9662\u7cfb\u6570\u91cf: {len(self.departments)}\\n\"\n        for dept in self.departments:\n            info += f\"  - {dept.get_info()}\\n\"\n        return info\n\n    class Department:\n        \"\"\"\u9662\u7cfb\u7c7b\uff08\u5185\u90e8\u7c7b\uff09\"\"\"\n\n        def __init__(self, name, university):\n            # university\u662f\u5916\u90e8\u7c7b\u7684\u5b9e\u4f8b\n            self.name = name\n            self.university = university  # \u4fdd\u5b58\u5916\u90e8\u5b9e\u4f8b\u7684\u5f15\u7528\n            self.professors = &#91;]\n            print(f\"\u5728\u5927\u5b66 {university.name} \u4e2d\u521b\u5efa\u9662\u7cfb: {self.name}\")\n\n        def add_professor(self, professor_name):\n            \"\"\"\u6dfb\u52a0\u6559\u6388\"\"\"\n            prof = self.Professor(professor_name, self)  # \u4f20\u9012\u90e8\u95e8self\n            self.professors.append(prof)\n            return prof\n\n        def get_info(self):\n            \"\"\"\u83b7\u53d6\u9662\u7cfb\u4fe1\u606f\"\"\"\n            info = f\"{self.name} (\u5c5e\u4e8e{self.university.name})\"\n            if self.professors:\n                info += f\"\uff0c\u6559\u6388: {', '.join(p.name for p in self.professors)}\"\n            return info\n\n        class Professor:\n            \"\"\"\u6559\u6388\u7c7b\uff08\u5d4c\u5957\u7684\u5185\u90e8\u7c7b\uff09\"\"\"\n\n            def __init__(self, name, department):\n                self.name = name\n                self.department = department  # \u4fdd\u5b58\u90e8\u95e8\u5b9e\u4f8b\u7684\u5f15\u7528\n                print(f\"\u5728\u9662\u7cfb {department.name} \u4e2d\u6dfb\u52a0\u6559\u6388: {self.name}\")\n\n            def introduce(self):\n                \"\"\"\u6559\u6388\u81ea\u6211\u4ecb\u7ecd\"\"\"\n                return (f\"\u6211\u662f{self.name}\u6559\u6388\uff0c\"\n                       f\"\u5728{self.department.university.name}\u7684\"\n                       f\"{self.department.name}\u5de5\u4f5c\")\n\nprint(\"=== \u5d4c\u5957\u7c7b\u4e2d\u7684self ===\")\n\n# \u521b\u5efa\u5927\u5b66\npku = University(\"\u5317\u4eac\u5927\u5b66\")\n\n# \u521b\u5efa\u9662\u7cfb\uff08\u9700\u8981\u5927\u5b66\u5b9e\u4f8b\uff09\ncs_dept = pku.create_department(\"\u8ba1\u7b97\u673a\u79d1\u5b66\")\nmath_dept = pku.create_department(\"\u6570\u5b66\")\n\n# \u6dfb\u52a0\u6559\u6388\nzhang = cs_dept.add_professor(\"\u5f20\u6559\u6388\")\nli = cs_dept.add_professor(\"\u674e\u6559\u6388\")\nwang = math_dept.add_professor(\"\u738b\u6559\u6388\")\n\n# \u663e\u793a\u4fe1\u606f\nprint(\"\\n\" + pku.show_info())\n\n# \u6559\u6388\u81ea\u6211\u4ecb\u7ecd\nprint(\"\\n\u6559\u6388\u4ecb\u7ecd:\")\nprint(zhang.introduce())\nprint(wang.introduce())\n\n# self\u5c42\u6b21\u5206\u6790\nprint(\"\\n=== self\u5c42\u6b21\u5206\u6790 ===\")\nprint(f\"pku (University\u5b9e\u4f8b): {id(pku)}\")\nprint(f\"cs_dept (Department\u5b9e\u4f8b): {id(cs_dept)}\")\nprint(f\"cs_dept.university: {id(cs_dept.university)}\")\nprint(f\"zhang (Professor\u5b9e\u4f8b): {id(zhang)}\")\nprint(f\"zhang.department: {id(zhang.department)}\")\nprint(f\"zhang.department.university: {id(zhang.department.university)}\")\n\nprint(\"\\n\u5f15\u7528\u5173\u7cfb:\")\nprint(f\"\u6559\u6388 -&gt; \u90e8\u95e8 -&gt; \u5927\u5b66\")\nprint(f\"{zhang.name} -&gt; {zhang.department.name} -&gt; {zhang.department.university.name}\")\n\n# \u76f4\u63a5\u521b\u5efa\u5185\u90e8\u7c7b\u5b9e\u4f8b\uff08\u4e0d\u63a8\u8350\u4f46\u53ef\u80fd\uff09\nprint(\"\\n=== \u76f4\u63a5\u521b\u5efa\u5185\u90e8\u7c7b ===\")\n# \u9700\u8981\u63d0\u4f9b\u5916\u90e8\u7c7b\u5b9e\u4f8b\nanother_dept = pku.Department(\"\u7269\u7406\u7cfb\", pku)\nprint(f\"\u76f4\u63a5\u521b\u5efa\u7684\u9662\u7cfb: {another_dept.get_info()}\")<\/code><\/pre>\n\n\n\n<h3 class=\"wp-block-heading\">3.3 \u56de\u8c03\u51fd\u6570\u4e2d\u7684self\u95ee\u9898<\/h3>\n\n\n\n<p>\u5728\u56de\u8c03\u51fd\u6570\u6216\u4e8b\u4ef6\u5904\u7406\u4e2d\uff0c<code>self<\/code>\u7684\u7ed1\u5b9a\u53ef\u80fd\u4e22\u5931\uff0c\u9700\u8981\u7279\u522b\u6ce8\u610f\u3002<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code># ============================================================================\n# \u56de\u8c03\u51fd\u6570\u4e2d\u7684self\u7ed1\u5b9a\n# ============================================================================\n\nclass EventHandler:\n    \"\"\"\u4e8b\u4ef6\u5904\u7406\u5668\uff1a\u5c55\u793aself\u7ed1\u5b9a\u95ee\u9898\"\"\"\n\n    def __init__(self, name):\n        self.name = name\n        self.event_count = 0\n        self.callbacks = &#91;]\n\n    def register_callback(self, callback):\n        \"\"\"\u6ce8\u518c\u56de\u8c03\u51fd\u6570\"\"\"\n        self.callbacks.append(callback)\n        print(f\"\u5df2\u6ce8\u518c\u56de\u8c03\u51fd\u6570: {callback.__name__}\")\n\n    def trigger_event(self, event_name):\n        \"\"\"\u89e6\u53d1\u4e8b\u4ef6\"\"\"\n        print(f\"\\n\u89e6\u53d1\u4e8b\u4ef6: {event_name}\")\n        self.event_count += 1\n\n        for callback in self.callbacks:\n            try:\n                callback(event_name)\n            except Exception as e:\n                print(f\"\u56de\u8c03\u6267\u884c\u5931\u8d25: {e}\")\n\n    def handle_event(self, event_name):\n        \"\"\"\u5904\u7406\u4e8b\u4ef6\uff08\u5b9e\u4f8b\u65b9\u6cd5\uff09\"\"\"\n        print(f\"{self.name} \u5904\u7406\u4e8b\u4ef6: {event_name} (\u603b\u4e8b\u4ef6\u6570: {self.event_count})\")\n\n    def create_bound_callback(self):\n        \"\"\"\u521b\u5efa\u7ed1\u5b9a\u7684\u56de\u8c03\u51fd\u6570\"\"\"\n        # \u65b9\u6cd51: \u4f7f\u7528lambda\u7ed1\u5b9aself\n        return lambda event: self.handle_event(event)\n\n    def create_partial_callback(self):\n        \"\"\"\u4f7f\u7528functools.partial\u7ed1\u5b9a\"\"\"\n        import functools\n        return functools.partial(self.handle_event)\n\n    # \u9759\u6001\u65b9\u6cd5\u4f5c\u4e3a\u56de\u8c03\n    @staticmethod\n    def static_callback(event_name):\n        \"\"\"\u9759\u6001\u56de\u8c03\u51fd\u6570\"\"\"\n        print(f\"\u9759\u6001\u65b9\u6cd5\u5904\u7406\u4e8b\u4ef6: {event_name}\")\n\nprint(\"=== \u56de\u8c03\u51fd\u6570\u4e2d\u7684self\u7ed1\u5b9a ===\")\n\n# \u521b\u5efa\u4e8b\u4ef6\u5904\u7406\u5668\nhandler = EventHandler(\"\u4e3b\u5904\u7406\u5668\")\n\nprint(\"1. \u76f4\u63a5\u4f20\u9012\u5b9e\u4f8b\u65b9\u6cd5\u7684\u95ee\u9898:\")\nhandler.register_callback(handler.handle_event)\n# \u6ce8\u610f\uff1a\u8fd9\u91cc\u4f20\u9012\u7684\u662f\u7ed1\u5b9a\u65b9\u6cd5\uff0cself\u5df2\u7ecf\u7ed1\u5b9a\nhandler.trigger_event(\"\u6d4b\u8bd5\u4e8b\u4ef61\")\n\nprint(\"\\n2. \u4f20\u9012\u672a\u7ed1\u5b9a\u65b9\u6cd5\u7684\u95ee\u9898:\")\n# \u9519\u8bef\u793a\u8303\uff1a\u4f20\u9012\u672a\u7ed1\u5b9a\u7684\u65b9\u6cd5\ntry:\n    unbound_method = EventHandler.handle_event  # \u672a\u7ed1\u5b9a\u65b9\u6cd5\n    handler.register_callback(unbound_method)\n    handler.trigger_event(\"\u6d4b\u8bd5\u4e8b\u4ef62\")  # \u4f1a\u5931\u8d25\uff0c\u7f3a\u5c11self\u53c2\u6570\nexcept TypeError as e:\n    print(f\"\u9519\u8bef: {e}\")\n\nprint(\"\\n3. \u4f7f\u7528lambda\u7ed1\u5b9aself:\")\nbound_callback = handler.create_bound_callback()\nhandler.register_callback(bound_callback)\nhandler.trigger_event(\"\u6d4b\u8bd5\u4e8b\u4ef63\")\n\nprint(\"\\n4. \u4f7f\u7528functools.partial:\")\npartial_callback = handler.create_partial_callback()\nhandler.register_callback(partial_callback)\nhandler.trigger_event(\"\u6d4b\u8bd5\u4e8b\u4ef64\")\n\nprint(\"\\n5. \u9759\u6001\u65b9\u6cd5\u56de\u8c03:\")\nhandler.register_callback(EventHandler.static_callback)\nhandler.trigger_event(\"\u6d4b\u8bd5\u4e8b\u4ef65\")\n\nprint(\"\\n6. \u7c7b\u65b9\u6cd5\u4f5c\u4e3a\u56de\u8c03:\")\nclass AdvancedHandler(EventHandler):\n    \"\"\"\u9ad8\u7ea7\u4e8b\u4ef6\u5904\u7406\u5668\"\"\"\n\n    @classmethod\n    def class_callback(cls, event_name):\n        \"\"\"\u7c7b\u65b9\u6cd5\u56de\u8c03\"\"\"\n        print(f\"\u7c7b\u65b9\u6cd5\u5904\u7406\u4e8b\u4ef6: {event_name}\")\n\nadvanced = AdvancedHandler(\"\u9ad8\u7ea7\u5904\u7406\u5668\")\nadvanced.register_callback(AdvancedHandler.class_callback)\nadvanced.trigger_event(\"\u6d4b\u8bd5\u4e8b\u4ef66\")\n\n# \u5b9e\u9645\u5e94\u7528\uff1aGUI\u4e8b\u4ef6\u5904\u7406\nprint(\"\\n=== GUI\u4e8b\u4ef6\u5904\u7406\u793a\u4f8b ===\")\n\nclass Button:\n    \"\"\"\u6309\u94ae\u7c7b\uff08\u6a21\u62dfGUI\u6309\u94ae\uff09\"\"\"\n\n    def __init__(self, label):\n        self.label = label\n        self.click_handlers = &#91;]\n\n    def click(self):\n        \"\"\"\u6a21\u62df\u6309\u94ae\u70b9\u51fb\"\"\"\n        print(f\"\\n\u6309\u94ae '{self.label}' \u88ab\u70b9\u51fb\")\n        for handler in self.click_handlers:\n            handler(self)\n\n    def on_click(self, handler):\n        \"\"\"\u6ce8\u518c\u70b9\u51fb\u5904\u7406\u5668\"\"\"\n        self.click_handlers.append(handler)\n\nclass Calculator:\n    \"\"\"\u8ba1\u7b97\u5668\u7c7b\"\"\"\n\n    def __init__(self):\n        self.value = 0\n\n        # \u521b\u5efa\u6309\u94ae\n        self.add_button = Button(\"+\")\n        self.subtract_button = Button(\"-\")\n        self.clear_button = Button(\"C\")\n\n        # \u6ce8\u518c\u4e8b\u4ef6\u5904\u7406\u5668\uff08\u9700\u8981\u6b63\u786e\u7ed1\u5b9aself\uff09\n        self.add_button.on_click(self._handle_add)\n        self.subtract_button.on_click(self._handle_subtract)\n        self.clear_button.on_click(lambda btn: self._handle_clear())\n\n    def _handle_add(self, button):\n        \"\"\"\u5904\u7406\u52a0\u6cd5\"\"\"\n        self.value += 1\n        print(f\"\u503c\u589e\u52a0\u4e3a: {self.value}\")\n\n    def _handle_subtract(self, button):\n        \"\"\"\u5904\u7406\u51cf\u6cd5\"\"\"\n        self.value -= 1\n        print(f\"\u503c\u51cf\u5c11\u4e3a: {self.value}\")\n\n    def _handle_clear(self):\n        \"\"\"\u5904\u7406\u6e05\u9664\"\"\"\n        self.value = 0\n        print(f\"\u503c\u5df2\u6e05\u96f6\")\n\n    def run(self):\n        \"\"\"\u8fd0\u884c\u8ba1\u7b97\u5668\"\"\"\n        print(f\"\\n\u8ba1\u7b97\u5668\u521d\u59cb\u503c: {self.value}\")\n        self.add_button.click()\n        self.add_button.click()\n        self.subtract_button.click()\n        self.clear_button.click()\n\ncalc = Calculator()\ncalc.run()<\/code><\/pre>\n\n\n\n<h2 class=\"wp-block-heading\">\u7b2c\u56db\u90e8\u5206\uff1a\u5e38\u89c1\u95ee\u9898\u4e0e\u6700\u4f73\u5b9e\u8df5<\/h2>\n\n\n\n<h3 class=\"wp-block-heading\">4.1 \u5e38\u89c1\u95ee\u9898\u89e3\u7b54<\/h3>\n\n\n\n<p><strong>Q1: \u4e3a\u4ec0\u4e48Python\u5f3a\u5236\u4f7f\u7528\u663e\u5f0fself\uff0c\u800cJava\/C++\u4f7f\u7528\u9690\u5f0fthis\uff1f<\/strong><\/p>\n\n\n\n<p><strong>A1:<\/strong> \u8fd9\u662f\u8bed\u8a00\u8bbe\u8ba1\u54f2\u5b66\u7684\u4e0d\u540c\uff1a<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li><strong>Python\u7684\u663e\u5f0fself<\/strong>\uff1a\u9075\u5faa&#8221;\u663e\u5f0f\u4f18\u4e8e\u9690\u5f0f&#8221;\u7684\u539f\u5219\uff0c\u660e\u786e\u663e\u793a\u65b9\u6cd5\u7684\u7b2c\u4e00\u4e2a\u53c2\u6570\u662f\u5b9e\u4f8b\u5f15\u7528<\/li>\n\n\n\n<li><strong>Java\/C++\u7684\u9690\u5f0fthis<\/strong>\uff1a\u5728\u65b9\u6cd5\u5185\u90e8\u81ea\u52a8\u53ef\u7528\uff0c\u8bed\u6cd5\u66f4\u7b80\u6d01\uff0c\u4f46\u53ef\u80fd\u5f15\u8d77\u6df7\u6dc6<\/li>\n<\/ul>\n\n\n\n<pre class=\"wp-block-code\"><code># Python\u663e\u5f0fself\nclass PythonClass:\n    def method(self, arg):  # \u663e\u5f0fself\n        return self.value + arg\n\n# Java\u9690\u5f0fthis\uff08\u4f2a\u4ee3\u7801\uff09\n\"\"\"\nclass JavaClass {\n    int value;\n    int method(int arg) {  \/\/ \u6ca1\u6709\u663e\u5f0fthis\u53c2\u6570\n        return this.value + arg;  \/\/ \u4f46\u53ef\u4ee5\u4f7f\u7528this\n    }\n}\n\"\"\"<\/code><\/pre>\n\n\n\n<p><strong>Q2: \u4ec0\u4e48\u65f6\u5019\u53ef\u4ee5\u7701\u7565self\/this\uff1f<\/strong><\/p>\n\n\n\n<p><strong>A2:<\/strong> \u5728\u4e0d\u540c\u8bed\u8a00\u4e2d\u89c4\u5219\u4e0d\u540c\uff1a<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li><strong>Python<\/strong>\uff1a\u51e0\u4e4e\u6c38\u8fdc\u4e0d\u80fd\u7701\u7565self\uff08\u9664\u4e86\u5728\u7c7b\u65b9\u6cd5\u3001\u9759\u6001\u65b9\u6cd5\u4e2d\uff09<\/li>\n\n\n\n<li><strong>Java<\/strong>\uff1a\u5f53\u6ca1\u6709\u547d\u540d\u51b2\u7a81\u65f6\u53ef\u4ee5\u7701\u7565\uff0c\u4f46\u660e\u786e\u4f7f\u7528this\u66f4\u6e05\u6670<\/li>\n\n\n\n<li><strong>C++<\/strong>\uff1a\u7c7b\u4f3cJava\uff0c\u4f46\u66f4\u591a\u4f7f\u7528this->\u6765\u660e\u786e\u6307\u9488\u8bbf\u95ee<\/li>\n<\/ul>\n\n\n\n<pre class=\"wp-block-code\"><code># Python\uff1a\u5fc5\u987b\u4f7f\u7528self\nclass Example:\n    def __init__(self, value):\n        self.value = value  # \u5fc5\u987b\u4f7f\u7528self\n\n    def method(self):\n        return self.value  # \u5fc5\u987b\u4f7f\u7528self\n\n# Java\uff1a\u53ef\u4ee5\u7701\u7565\u4f46\u6709\u98ce\u9669\n\"\"\"\nclass Example {\n    private int value;\n\n    public Example(int value) {\n        this.value = value;  \/\/ \u5fc5\u987b\u4f7f\u7528this\u533a\u5206\u53c2\u6570\n    }\n\n    public int getValue() {\n        return value;  \/\/ \u53ef\u4ee5\u7701\u7565this\uff0c\u4f46\u53ef\u80fd\u5f15\u8d77\u6df7\u6dc6\n    }\n}\n\"\"\"<\/code><\/pre>\n\n\n\n<p><strong>Q3: self\/this\u5728\u5185\u5b58\u4e2d\u662f\u4ec0\u4e48\uff1f<\/strong><\/p>\n\n\n\n<p><strong>A3:<\/strong> self\/this\u672c\u8d28\u4e0a\u662f\u4e00\u4e2a\u6307\u9488\uff08C++\uff09\u6216\u5f15\u7528\uff08Java\/Python\uff09\uff0c\u6307\u5411\u5bf9\u8c61\u5728\u5185\u5b58\u4e2d\u7684\u5730\u5740\u3002<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>class MemoryDemo:\n    def show_self(self):\n        print(f\"self\u7684\u5185\u5b58\u5730\u5740: {id(self)}\")\n        print(f\"self\u7684\u7c7b\u578b: {type(self)}\")\n        print(f\"self\u5c31\u662f\u5bf9\u8c61\u672c\u8eab\u5417? {self is obj}\")\n\nobj = MemoryDemo()\nobj.show_self()\nprint(f\"obj\u7684\u5185\u5b58\u5730\u5740: {id(obj)}\")<\/code><\/pre>\n\n\n\n<p><strong>Q4: \u9759\u6001\u65b9\u6cd5\u548c\u7c7b\u65b9\u6cd5\u4e2d\u9700\u8981self\/this\u5417\uff1f<\/strong><\/p>\n\n\n\n<p><strong>A4:<\/strong> \u4e0d\u9700\u8981\uff1a<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li><strong>\u9759\u6001\u65b9\u6cd5<\/strong>\uff1a\u4e0d\u63a5\u6536self\/this\uff0c\u5c31\u50cf\u666e\u901a\u51fd\u6570<\/li>\n\n\n\n<li><strong>\u7c7b\u65b9\u6cd5<\/strong>\uff1a\u63a5\u6536\u7c7b\u5f15\u7528\uff08cls\uff09\uff0c\u800c\u4e0d\u662f\u5b9e\u4f8b\u5f15\u7528<\/li>\n<\/ul>\n\n\n\n<pre class=\"wp-block-code\"><code>class MethodTypes:\n    def instance_method(self):\n        print(f\"\u5b9e\u4f8b\u65b9\u6cd5\uff0cself={self}\")\n\n    @classmethod\n    def class_method(cls):\n        print(f\"\u7c7b\u65b9\u6cd5\uff0ccls={cls}\")\n\n    @staticmethod\n    def static_method():\n        print(\"\u9759\u6001\u65b9\u6cd5\uff0c\u6ca1\u6709self\/cls\")\n\nobj = MethodTypes()\nobj.instance_method()  # \u4f20\u9012self\nobj.class_method()     # \u4f20\u9012cls\uff08\u7c7b\uff09\nobj.static_method()    # \u4e0d\u4f20\u9012\u4efb\u4f55\u7279\u6b8a\u53c2\u6570<\/code><\/pre>\n\n\n\n<h3 class=\"wp-block-heading\">4.2 \u6700\u4f73\u5b9e\u8df5\u603b\u7ed3<\/h3>\n\n\n\n<ol class=\"wp-block-list\">\n<li><strong>\u59cb\u7ec8\u4f7f\u7528self\/this\u8bbf\u95ee\u5b9e\u4f8b\u53d8\u91cf<\/strong>\uff1a<\/li>\n<\/ol>\n\n\n\n<pre class=\"wp-block-code\"><code>   # \u597d\n   class GoodExample:\n       def __init__(self, name):\n           self.name = name  # \u4f7f\u7528self\n\n       def greet(self):\n           return f\"Hello, {self.name}\"  # \u4f7f\u7528self\n\n   # \u4e0d\u597d\n   class BadExample:\n       def __init__(self, name):\n           name = name  # \u6ca1\u6709self\uff0c\u521b\u5efa\u7684\u662f\u5c40\u90e8\u53d8\u91cf<\/code><\/pre>\n\n\n\n<ol start=\"2\" class=\"wp-block-list\">\n<li><strong>\u5728\u6784\u9020\u51fd\u6570\u4e2d\u521d\u59cb\u5316\u6240\u6709\u5fc5\u8981\u7684\u5b9e\u4f8b\u53d8\u91cf<\/strong>\uff1a<\/li>\n<\/ol>\n\n\n\n<pre class=\"wp-block-code\"><code>   class GoodInitialization:\n       def __init__(self, required_param):\n           self.required = required_param\n           self.optional = None  # \u663e\u5f0f\u521d\u59cb\u5316\u4e3aNone\n           self.counter = 0  # \u663e\u5f0f\u521d\u59cb\u5316\u4e3a0\n           self.items = &#91;]  # \u663e\u5f0f\u521d\u59cb\u5316\u4e3a\u7a7a\u5217\u8868<\/code><\/pre>\n\n\n\n<ol start=\"3\" class=\"wp-block-list\">\n<li><strong>\u4f7f\u7528self\u8c03\u7528\u5176\u4ed6\u65b9\u6cd5\u5b9e\u73b0\u4ee3\u7801\u590d\u7528<\/strong>\uff1a<\/li>\n<\/ol>\n\n\n\n<pre class=\"wp-block-code\"><code>   class OrderProcessor:\n       def process_order(self, order):\n           self._validate_order(order)\n           self._calculate_total(order)\n           self._apply_discounts(order)\n           self._generate_invoice(order)\n           return self._finalize_order(order)\n\n       def _validate_order(self, order): ...\n       def _calculate_total(self, order): ...\n       # ... \u5176\u4ed6\u65b9\u6cd5<\/code><\/pre>\n\n\n\n<ol start=\"4\" class=\"wp-block-list\">\n<li><strong>\u907f\u514d\u5728\u65b9\u6cd5\u4e2d\u4fee\u6539self\u7684\u5f15\u7528<\/strong>\uff1a<\/li>\n<\/ol>\n\n\n\n<pre class=\"wp-block-code\"><code>   # \u5371\u9669\uff1a\u4fee\u6539self\u5f15\u7528\n   class Dangerous:\n       def bad_method(self):\n           self = SomethingElse()  # \u7edd\u5bf9\u4e0d\u8981\u8fd9\u6837\u505a\uff01\n\n   # \u5b89\u5168\uff1a\u4fee\u6539self\u7684\u5c5e\u6027\n   class Safe:\n       def good_method(self):\n           self.value = 42  # \u4fee\u6539\u5c5e\u6027\uff0c\u4e0d\u662fself\u672c\u8eab<\/code><\/pre>\n\n\n\n<ol start=\"5\" class=\"wp-block-list\">\n<li><strong>\u5728\u5d4c\u5957\u7c7b\u4e2d\u5c0f\u5fc3\u5904\u7406self\u5c42\u6b21<\/strong>\uff1a<\/li>\n<\/ol>\n\n\n\n<pre class=\"wp-block-code\"><code>   class Outer:\n       def __init__(self):\n           self.value = \"outer\"\n\n       class Inner:\n           def __init__(self, outer_instance):\n               self.outer = outer_instance  # \u4fdd\u5b58\u5916\u90e8\u5b9e\u4f8b\u5f15\u7528\n\n           def show(self):\n               print(f\"inner self: {self}\")\n               print(f\"outer value: {self.outer.value}\")<\/code><\/pre>\n\n\n\n<ol start=\"6\" class=\"wp-block-list\">\n<li><strong>\u5728\u56de\u8c03\u4e2d\u6b63\u786e\u7ed1\u5b9aself<\/strong>\uff1a<\/li>\n<\/ol>\n\n\n\n<pre class=\"wp-block-code\"><code>   class EventHandler:\n       def __init__(self):\n           self.value = 0\n\n       def get_callback(self):\n           # \u6b63\u786e\uff1a\u4f7f\u7528lambda\u6216partial\u7ed1\u5b9a\n           return lambda: self._handle_event()\n\n       def _handle_event(self):\n           self.value += 1<\/code><\/pre>\n\n\n\n<ol start=\"7\" class=\"wp-block-list\">\n<li><strong>\u4f7f\u7528\u7c7b\u578b\u63d0\u793a\u660e\u786eself\u7684\u7c7b\u578b<\/strong>\uff08Python 3.11+\uff09\uff1a<\/li>\n<\/ol>\n\n\n\n<pre class=\"wp-block-code\"><code>   from typing import Self\n\n   class ModernClass:\n       def return_self(self) -&gt; Self:\n           \"\"\"\u8fd4\u56deself\uff0c\u7c7b\u578b\u63d0\u793a\u4e3aSelf\"\"\"\n           return self\n\n       @classmethod\n       def create(cls) -&gt; Self:\n           \"\"\"\u5de5\u5382\u65b9\u6cd5\u8fd4\u56de\u5b9e\u4f8b\"\"\"\n           return cls()<\/code><\/pre>\n\n\n\n<h3 class=\"wp-block-heading\">4.3 \u8c03\u8bd5\u6280\u5de7<\/h3>\n\n\n\n<ol class=\"wp-block-list\">\n<li><strong>\u6253\u5370self\u4ee5\u7406\u89e3\u5bf9\u8c61\u72b6\u6001<\/strong>\uff1a<\/li>\n<\/ol>\n\n\n\n<pre class=\"wp-block-code\"><code>   class DebugExample:\n       def method(self):\n           print(f\"self: {self}\")\n           print(f\"self\u7684\u7c7b\u578b: {type(self)}\")\n           print(f\"self\u7684\u5c5e\u6027: {self.__dict__}\")<\/code><\/pre>\n\n\n\n<ol start=\"2\" class=\"wp-block-list\">\n<li><strong>\u4f7f\u7528assert\u9a8c\u8bc1self\u7684\u72b6\u6001<\/strong>\uff1a<\/li>\n<\/ol>\n\n\n\n<pre class=\"wp-block-code\"><code>   class ValidatedClass:\n       def critical_method(self):\n           assert hasattr(self, 'required_field'), \"required_field\u4e0d\u5b58\u5728\"\n           assert self.value &gt; 0, f\"value\u5fc5\u987b\u5927\u4e8e0\uff0c\u5f53\u524d\u4e3a{self.value}\"\n           # \u7ee7\u7eed\u6267\u884c...<\/code><\/pre>\n\n\n\n<ol start=\"3\" class=\"wp-block-list\">\n<li><strong>\u8ffd\u8e2a\u65b9\u6cd5\u8c03\u7528\u94fe<\/strong>\uff1a<\/li>\n<\/ol>\n\n\n\n<pre class=\"wp-block-code\"><code>   class Traceable:\n       def __init__(self):\n           self.call_stack = &#91;]\n\n       def method_a(self):\n           self._log_call(\"method_a\")\n           self.method_b()\n\n       def method_b(self):\n           self._log_call(\"method_b\")\n\n       def _log_call(self, method_name):\n           self.call_stack.append(method_name)\n           print(f\"\u8c03\u7528\u94fe: {' -&gt; '.join(self.call_stack)}\")<\/code><\/pre>\n\n\n\n<h2 class=\"wp-block-heading\">\u7b2c\u4e94\u90e8\u5206\uff1a\u5b9e\u6218\u5e94\u7528 &#8211; \u6e38\u620f\u5f15\u64ce\u4e2d\u7684self<\/h2>\n\n\n\n<p>\u8ba9\u6211\u4eec\u901a\u8fc7\u4e00\u4e2a\u7b80\u5355\u7684\u6e38\u620f\u5f15\u64ce\u793a\u4f8b\u6765\u5c55\u793aself\u5728\u590d\u6742\u7cfb\u7edf\u4e2d\u7684\u5e94\u7528\u3002<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code># ============================================================================\n# \u6e38\u620f\u5f15\u64ce\u4e2d\u7684self\u5e94\u7528\n# ============================================================================\n\nimport math\nimport random\nfrom typing import List, Dict, Optional\n\nclass Vector2D:\n    \"\"\"\u4e8c\u7ef4\u5411\u91cf\u7c7b\"\"\"\n\n    def __init__(self, x: float = 0, y: float = 0):\n        self.x = x\n        self.y = y\n\n    def __add__(self, other: 'Vector2D') -&gt; 'Vector2D':\n        \"\"\"\u5411\u91cf\u52a0\u6cd5\uff1a\u8fd4\u56de\u65b0\u5411\u91cf\uff0c\u4e0d\u4fee\u6539self\"\"\"\n        return Vector2D(self.x + other.x, self.y + other.y)\n\n    def __sub__(self, other: 'Vector2D') -&gt; 'Vector2D':\n        \"\"\"\u5411\u91cf\u51cf\u6cd5\"\"\"\n        return Vector2D(self.x - other.x, self.y - other.y)\n\n    def __mul__(self, scalar: float) -&gt; 'Vector2D':\n        \"\"\"\u5411\u91cf\u4e58\u4ee5\u6807\u91cf\"\"\"\n        return Vector2D(self.x * scalar, self.y * scalar)\n\n    def magnitude(self) -&gt; float:\n        \"\"\"\u5411\u91cf\u7684\u6a21\"\"\"\n        return math.sqrt(self.x ** 2 + self.y ** 2)\n\n    def normalize(self) -&gt; 'Vector2D':\n        \"\"\"\u5355\u4f4d\u5316\u5411\u91cf\uff1a\u4fee\u6539self\"\"\"\n        mag = self.magnitude()\n        if mag &gt; 0:\n            self.x \/= mag\n            self.y \/= mag\n        return self\n\n    def copy(self) -&gt; 'Vector2D':\n        \"\"\"\u8fd4\u56de\u526f\u672c\"\"\"\n        return Vector2D(self.x, self.y)\n\n    def __str__(self):\n        return f\"Vector2D({self.x:.2f}, {self.y:.2f})\"\n\nclass GameObject:\n    \"\"\"\u6e38\u620f\u5bf9\u8c61\u57fa\u7c7b\"\"\"\n\n    next_id = 1  # \u7c7b\u53d8\u91cf\uff1a\u4e0b\u4e00\u4e2aID\n\n    def __init__(self, position: Vector2D):\n        # \u5b9e\u4f8b\u53d8\u91cf\n        self.id = GameObject.next_id\n        GameObject.next_id += 1\n\n        self.position = position.copy()\n        self.velocity = Vector2D()\n        self.rotation = 0  # \u89d2\u5ea6\n        self.scale = Vector2D(1, 1)\n        self.active = True\n        self.components = {}\n\n        print(f\"\u521b\u5efa\u6e38\u620f\u5bf9\u8c61 #{self.id}\")\n\n    def update(self, delta_time: float):\n        \"\"\"\u66f4\u65b0\u5bf9\u8c61\u72b6\u6001\"\"\"\n        if not self.active:\n            return\n\n        # \u66f4\u65b0\u4f4d\u7f6e\uff1a\u4f7f\u7528self.velocity\n        self.position += self.velocity * delta_time\n\n        # \u8c03\u7528\u6240\u6709\u7ec4\u4ef6\u7684update\u65b9\u6cd5\n        for component in self.components.values():\n            component.update(delta_time)\n\n    def add_component(self, component: 'Component'):\n        \"\"\"\u6dfb\u52a0\u7ec4\u4ef6\"\"\"\n        component.game_object = self  # \u8bbe\u7f6e\u7ec4\u4ef6\u7684\u6e38\u620f\u5bf9\u8c61\u5f15\u7528\n        self.components&#91;type(component).__name__] = component\n        component.start()\n\n    def get_component(self, component_type):\n        \"\"\"\u83b7\u53d6\u7ec4\u4ef6\"\"\"\n        return self.components.get(component_type.__name__)\n\n    def destroy(self):\n        \"\"\"\u9500\u6bc1\u5bf9\u8c61\"\"\"\n        self.active = False\n        for component in self.components.values():\n            component.on_destroy()\n        self.components.clear()\n        print(f\"\u9500\u6bc1\u6e38\u620f\u5bf9\u8c61 #{self.id}\")\n\nclass Component:\n    \"\"\"\u7ec4\u4ef6\u57fa\u7c7b\"\"\"\n\n    def __init__(self):\n        self.game_object = None  # \u5c06\u5728add_component\u65f6\u8bbe\u7f6e\n\n    def start(self):\n        \"\"\"\u7ec4\u4ef6\u5f00\u59cb\"\"\"\n        pass\n\n    def update(self, delta_time: float):\n        \"\"\"\u7ec4\u4ef6\u66f4\u65b0\"\"\"\n        pass\n\n    def on_destroy(self):\n        \"\"\"\u7ec4\u4ef6\u9500\u6bc1\"\"\"\n        pass\n\nclass SpriteRenderer(Component):\n    \"\"\"\u7cbe\u7075\u6e32\u67d3\u5668\u7ec4\u4ef6\"\"\"\n\n    def __init__(self, sprite: str = \"default\"):\n        super().__init__()\n        self.sprite = sprite\n        self.color = (255, 255, 255)  # RGB\n        self.visible = True\n\n    def start(self):\n        \"\"\"\u521d\u59cb\u5316\"\"\"\n        # \u901a\u8fc7self.game_object\u8bbf\u95ee\u6240\u5c5e\u6e38\u620f\u5bf9\u8c61\n        print(f\"\u7cbe\u7075\u6e32\u67d3\u5668\u542f\u52a8\uff0c\u6240\u5c5e\u5bf9\u8c61ID: {self.game_object.id}\")\n\n    def update(self, delta_time: float):\n        \"\"\"\u66f4\u65b0\uff1a\u53ef\u4ee5\u8bbf\u95eeself.game_object\"\"\"\n        # \u793a\u4f8b\uff1a\u6839\u636e\u5bf9\u8c61\u65cb\u8f6c\u8c03\u6574\u989c\u8272\n        if hasattr(self.game_object, 'rotation'):\n            hue = (self.game_object.rotation % 360) \/ 360\n            self.color = self._hsv_to_rgb(hue, 1, 1)\n\n    def render(self):\n        \"\"\"\u6e32\u67d3\u7cbe\u7075\"\"\"\n        if not self.visible or not self.game_object.active:\n            return\n\n        # \u6a21\u62df\u6e32\u67d3\n        pos = self.game_object.position\n        print(f\"\u6e32\u67d3\u7cbe\u7075 '{self.sprite}' \u5728\u4f4d\u7f6e ({pos.x:.1f}, {pos.y:.1f}) \"\n              f\"\u989c\u8272 {self.color}\")\n\n    @staticmethod\n    def _hsv_to_rgb(h, s, v):\n        \"\"\"HSV\u8f6cRGB\"\"\"\n        # \u7b80\u5316\u5b9e\u73b0\n        r = int((h * 6) * 255) % 255\n        g = int((h * 3) * 255) % 255\n        b = int((h * 2) * 255) % 255\n        return (r, g, b)\n\nclass PhysicsBody(Component):\n    \"\"\"\u7269\u7406\u4f53\u7ec4\u4ef6\"\"\"\n\n    def __init__(self, mass: float = 1):\n        super().__init__()\n        self.mass = mass\n        self.velocity = Vector2D()\n        self.acceleration = Vector2D()\n        self.use_gravity = True\n        self.gravity = Vector2D(0, -9.8)\n\n    def start(self):\n        \"\"\"\u521d\u59cb\u5316\"\"\"\n        # \u590d\u5236\u6e38\u620f\u5bf9\u8c61\u7684\u901f\u5ea6\n        self.velocity = self.game_object.velocity.copy()\n\n    def update(self, delta_time: float):\n        \"\"\"\u7269\u7406\u66f4\u65b0\"\"\"\n        # \u5e94\u7528\u91cd\u529b\n        if self.use_gravity:\n            self.acceleration = self.gravity\n\n        # \u66f4\u65b0\u901f\u5ea6\uff1av = v0 + a*t\n        self.velocity += self.acceleration * delta_time\n\n        # \u66f4\u65b0\u6e38\u620f\u5bf9\u8c61\u4f4d\u7f6e\n        self.game_object.position += self.velocity * delta_time\n\n        # \u66f4\u65b0\u6e38\u620f\u5bf9\u8c61\u901f\u5ea6\uff08\u540c\u6b65\uff09\n        self.game_object.velocity = self.velocity.copy()\n\n        # \u7b80\u5355\u8fb9\u754c\u68c0\u6d4b\n        self._check_bounds()\n\n    def _check_bounds(self):\n        \"\"\"\u68c0\u67e5\u8fb9\u754c\"\"\"\n        pos = self.game_object.position\n        if pos.y &lt; 0:  # \u78b0\u5230\u5730\u9762\n            pos.y = 0\n            self.velocity.y = -self.velocity.y * 0.8  # \u5f39\u6027\u78b0\u649e\n\n    def apply_force(self, force: Vector2D):\n        \"\"\"\u5e94\u7528\u529b\"\"\"\n        # F = m*a =&gt; a = F\/m\n        self.acceleration += force * (1 \/ self.mass)\n\nclass GameEngine:\n    \"\"\"\u6e38\u620f\u5f15\u64ce\"\"\"\n\n    def __init__(self):\n        self.game_objects = &#91;]\n        self.delta_time = 0.016  # \u5047\u8bbe60FPS\n        self.time = 0\n        self._renderers = &#91;]\n\n    def create_object(self, position: Vector2D) -&gt; GameObject:\n        \"\"\"\u521b\u5efa\u6e38\u620f\u5bf9\u8c61\"\"\"\n        obj = GameObject(position)\n        self.game_objects.append(obj)\n        return obj\n\n    def update(self):\n        \"\"\"\u66f4\u65b0\u6240\u6709\u6e38\u620f\u5bf9\u8c61\"\"\"\n        self.time += self.delta_time\n\n        # \u66f4\u65b0\u6240\u6709\u6d3b\u52a8\u5bf9\u8c61\n        for obj in self.game_objects&#91;:]:  # \u4f7f\u7528\u526f\u672c\uff0c\u56e0\u4e3a\u53ef\u80fd\u4fee\u6539\u5217\u8868\n            if obj.active:\n                obj.update(self.delta_time)\n            else:\n                self.game_objects.remove(obj)  # \u79fb\u9664\u5df2\u9500\u6bc1\u7684\u5bf9\u8c61\n\n    def render(self):\n        \"\"\"\u6e32\u67d3\u6240\u6709\u5bf9\u8c61\"\"\"\n        print(f\"\\n--- \u5e27\u6e32\u67d3 (\u65f6\u95f4: {self.time:.2f}s) ---\")\n\n        # \u6536\u96c6\u6240\u6709\u6e32\u67d3\u5668\n        renderers = &#91;]\n        for obj in self.game_objects:\n            if obj.active:\n                renderer = obj.get_component(SpriteRenderer)\n                if renderer:\n                    renderers.append(renderer)\n\n        # \u6e32\u67d3\u6240\u6709\u7cbe\u7075\n        for renderer in renderers:\n            renderer.render()\n\n    def run(self, frames: int = 100):\n        \"\"\"\u8fd0\u884c\u6e38\u620f\u5faa\u73af\"\"\"\n        print(\"=== \u6e38\u620f\u5f15\u64ce\u542f\u52a8 ===\")\n\n        for frame in range(frames):\n            self.update()\n            if frame % 10 == 0:  # \u6bcf10\u5e27\u6e32\u67d3\u4e00\u6b21\n                self.render()\n\n        print(\"\\n=== \u6e38\u620f\u5f15\u64ce\u505c\u6b62 ===\")\n\n# \u521b\u5efa\u548c\u8fd0\u884c\u6e38\u620f\ndef create_simple_game():\n    \"\"\"\u521b\u5efa\u7b80\u5355\u6e38\u620f\u573a\u666f\"\"\"\n\n    engine = GameEngine()\n\n    # \u521b\u5efa\u9759\u6001\u5bf9\u8c61\uff08\u5730\u9762\uff09\n    ground = engine.create_object(Vector2D(0, -5))\n    ground.add_component(SpriteRenderer(\"ground\"))\n\n    # \u521b\u5efa\u7269\u7406\u5bf9\u8c61\uff08\u7403\uff09\n    ball = engine.create_object(Vector2D(0, 10))\n    ball.add_component(SpriteRenderer(\"ball\"))\n\n    physics = PhysicsBody(mass=0.5)\n    physics.apply_force(Vector2D(5, 20))  # \u521d\u59cb\u529b\n    ball.add_component(physics)\n\n    # \u521b\u5efa\u53e6\u4e00\u4e2a\u5bf9\u8c61\n    box = engine.create_object(Vector2D(5, 5))\n    box.add_component(SpriteRenderer(\"box\"))\n\n    box_physics = PhysicsBody(mass=2)\n    box.add_component(box_physics)\n\n    # \u8fd0\u884c\u6e38\u620f\n    engine.run(frames=60)\n\n    # \u9500\u6bc1\u4e00\u4e2a\u5bf9\u8c61\n    print(\"\\n\u624b\u52a8\u9500\u6bc1\u7403\u5bf9\u8c61:\")\n    ball.destroy()\n\n    # \u7ee7\u7eed\u8fd0\u884c\n    engine.run(frames=20)\n\nif __name__ == \"__main__\":\n    create_simple_game()<\/code><\/pre>\n\n\n\n<p>\u8fd9\u4e2a\u6e38\u620f\u5f15\u64ce\u793a\u4f8b\u5c55\u793a\u4e86\uff1a<\/p>\n\n\n\n<ol class=\"wp-block-list\">\n<li><strong>self\u5728\u7ee7\u627f\u94fe\u4e2d\u7684\u4f20\u9012<\/strong>\uff1aGameObject -> Component -> \u5177\u4f53\u7ec4\u4ef6<\/li>\n\n\n\n<li><strong>self\u5728\u7ec4\u4ef6\u6a21\u5f0f\u4e2d\u7684\u5e94\u7528<\/strong>\uff1a\u7ec4\u4ef6\u901a\u8fc7self.game_object\u8bbf\u95ee\u6240\u5c5e\u5bf9\u8c61<\/li>\n\n\n\n<li><strong>self\u5728\u6570\u5b66\u8fd0\u7b97\u4e2d\u7684\u4f7f\u7528<\/strong>\uff1aVector2D\u7c7b\u4e2d\u7684\u8fd0\u7b97\u65b9\u6cd5<\/li>\n\n\n\n<li><strong>self\u5728\u6e38\u620f\u5faa\u73af\u4e2d\u7684\u89d2\u8272<\/strong>\uff1a\u6bcf\u4e2a\u5bf9\u8c61\u901a\u8fc7self.update()\u66f4\u65b0\u81ea\u8eab\u72b6\u6001<\/li>\n<\/ol>\n\n\n\n<h2 class=\"wp-block-heading\">\u7b2c\u516d\u90e8\u5206\uff1a\u603b\u7ed3\u4e0e\u54f2\u5b66\u601d\u8003<\/h2>\n\n\n\n<h3 class=\"wp-block-heading\">6.1 \u6838\u5fc3\u6982\u5ff5\u56de\u987e<\/h3>\n\n\n\n<ol class=\"wp-block-list\">\n<li><strong>self\/this\u7684\u672c\u8d28<\/strong>\uff1a<\/li>\n<\/ol>\n\n\n\n<ul class=\"wp-block-list\">\n<li>\u5bf9\u8c61\u7684\u81ea\u6211\u5f15\u7528<\/li>\n\n\n\n<li>\u65b9\u6cd5\u7ed1\u5b9a\u7684\u5173\u952e<\/li>\n\n\n\n<li>\u591a\u6001\u6027\u7684\u57fa\u7840<\/li>\n<\/ul>\n\n\n\n<ol class=\"wp-block-list\">\n<li><strong>\u4e0d\u540c\u8bed\u8a00\u4e2d\u7684\u5b9e\u73b0<\/strong>\uff1a<\/li>\n<\/ol>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Python\uff1a\u663e\u5f0fself\u53c2\u6570<\/li>\n\n\n\n<li>Java\/C++\uff1a\u9690\u5f0fthis\u5f15\u7528<\/li>\n\n\n\n<li>JavaScript\uff1a\u52a8\u6001\u7ed1\u5b9a\u7684this<\/li>\n<\/ul>\n\n\n\n<ol class=\"wp-block-list\">\n<li><strong>\u5173\u952e\u5e94\u7528\u573a\u666f<\/strong>\uff1a<\/li>\n<\/ol>\n\n\n\n<ul class=\"wp-block-list\">\n<li>\u8bbf\u95ee\u5b9e\u4f8b\u53d8\u91cf<\/li>\n\n\n\n<li>\u8c03\u7528\u5176\u4ed6\u65b9\u6cd5<\/li>\n\n\n\n<li>\u6784\u9020\u51fd\u6570\u521d\u59cb\u5316<\/li>\n\n\n\n<li>\u7ee7\u627f\u548c\u591a\u6001<\/li>\n\n\n\n<li>\u56de\u8c03\u51fd\u6570\u7ed1\u5b9a<\/li>\n<\/ul>\n\n\n\n<h3 class=\"wp-block-heading\">6.2 \u8bbe\u8ba1\u54f2\u5b66\u601d\u8003<\/h3>\n\n\n\n<p><strong>1. \u5bf9\u8c61\u8eab\u4efd\u4e0e\u81ea\u6211\u610f\u8bc6<\/strong><br><code>self<\/code>\/<code>this<\/code>\u8d4b\u4e88\u4e86\u5bf9\u8c61\u81ea\u6211\u610f\u8bc6\uff0c\u8ba9\u5bf9\u8c61\u80fd\u591f\uff1a<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>\u77e5\u9053\u81ea\u5df1\u662f\u8c01\uff08\u8eab\u4efd\uff09<\/li>\n\n\n\n<li>\u77e5\u9053\u81ea\u5df1\u6709\u4ec0\u4e48\uff08\u72b6\u6001\uff09<\/li>\n\n\n\n<li>\u77e5\u9053\u81ea\u5df1\u80fd\u505a\u4ec0\u4e48\uff08\u884c\u4e3a\uff09<\/li>\n<\/ul>\n\n\n\n<p><strong>2. \u5c01\u88c5\u4e0e\u81ea\u6211\u7ba1\u7406<\/strong><br>\u901a\u8fc7<code>self<\/code>\/<code>this<\/code>\uff0c\u5bf9\u8c61\u80fd\u591f\uff1a<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>\u7ba1\u7406\u81ea\u5df1\u7684\u5185\u90e8\u72b6\u6001<\/li>\n\n\n\n<li>\u4fdd\u62a4\u81ea\u5df1\u7684\u6570\u636e\u5b8c\u6574\u6027<\/li>\n\n\n\n<li>\u63d0\u4f9b\u4e00\u81f4\u7684\u5bf9\u5916\u63a5\u53e3<\/li>\n<\/ul>\n\n\n\n<p><strong>3. \u6d88\u606f\u4f20\u9012\u4e0e\u534f\u4f5c<\/strong><br>\u5728\u9762\u5411\u5bf9\u8c61\u7cfb\u7edf\u4e2d\uff0c\u5bf9\u8c61\u901a\u8fc7\uff1a<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>\u5411\u81ea\u5df1\u53d1\u9001\u6d88\u606f\uff08\u8c03\u7528\u81ea\u5df1\u7684\u65b9\u6cd5\uff09<\/li>\n\n\n\n<li>\u5411\u5176\u4ed6\u5bf9\u8c61\u53d1\u9001\u6d88\u606f\uff08\u8c03\u7528\u5176\u4ed6\u5bf9\u8c61\u7684\u65b9\u6cd5\uff09<\/li>\n\n\n\n<li>\u54cd\u5e94\u6536\u5230\u7684\u6d88\u606f\uff08\u5b9e\u73b0\u65b9\u6cd5\uff09<\/li>\n<\/ul>\n\n\n\n<h3 class=\"wp-block-heading\">6.3 \u5b9e\u7528\u5efa\u8bae<\/h3>\n\n\n\n<ol class=\"wp-block-list\">\n<li><strong>\u7406\u89e3\u800c\u4e0d\u6b7b\u8bb0<\/strong>\uff1a\u7406\u89e3<code>self<\/code>\/<code>this<\/code>\u7684\u672c\u8d28\uff0c\u800c\u4e0d\u662f\u6b7b\u8bb0\u8bed\u6cd5<\/li>\n\n\n\n<li><strong>\u4fdd\u6301\u4e00\u81f4<\/strong>\uff1a\u5728\u4ee3\u7801\u4e2d\u4e00\u81f4\u5730\u4f7f\u7528<code>self<\/code>\/<code>this<\/code><\/li>\n\n\n\n<li><strong>\u5229\u7528IDE<\/strong>\uff1a\u73b0\u4ee3IDE\u80fd\u5f88\u597d\u5730\u533a\u5206\u5b9e\u4f8b\u53d8\u91cf\u548c\u5c40\u90e8\u53d8\u91cf<\/li>\n\n\n\n<li><strong>\u7f16\u5199\u6d4b\u8bd5<\/strong>\uff1a\u6d4b\u8bd5\u80fd\u53d1\u73b0<code>self<\/code>\/<code>this<\/code>\u76f8\u5173\u9519\u8bef<\/li>\n\n\n\n<li><strong>\u9605\u8bfb\u6e90\u7801<\/strong>\uff1a\u9605\u8bfb\u4f18\u79c0\u5f00\u6e90\u4ee3\u7801\uff0c\u5b66\u4e60<code>self<\/code>\/<code>this<\/code>\u7684\u6700\u4f73\u5b9e\u8df5<\/li>\n<\/ol>\n\n\n\n<h3 class=\"wp-block-heading\">6.4 \u4e0b\u4e00\u6b65\u5b66\u4e60\u65b9\u5411<\/h3>\n\n\n\n<ol class=\"wp-block-list\">\n<li><strong>\u6df1\u5165\u7406\u89e3\u63cf\u8ff0\u7b26\u534f\u8bae<\/strong>\uff1aPython\u4e2d\u5c5e\u6027\u8bbf\u95ee\u7684\u5e95\u5c42\u673a\u5236<\/li>\n\n\n\n<li><strong>\u7814\u7a76\u5143\u7c7b\u7f16\u7a0b<\/strong>\uff1a\u7406\u89e3\u7c7b\u662f\u5982\u4f55\u88ab\u521b\u5efa\u7684<\/li>\n\n\n\n<li><strong>\u5b66\u4e60\u8bbe\u8ba1\u6a21\u5f0f<\/strong>\uff1a\u4e86\u89e3\u5404\u79cd\u6a21\u5f0f\u4e2d\u5bf9\u8c61\u534f\u4f5c\u7684\u65b9\u5f0f<\/li>\n\n\n\n<li><strong>\u63a2\u7d22\u51fd\u6570\u5f0f\u7f16\u7a0b<\/strong>\uff1a\u5bf9\u6bd4\u9762\u5411\u5bf9\u8c61\u548c\u51fd\u6570\u5f0f\u7f16\u7a0b\u4e2d\u7684&#8221;\u81ea\u6211&#8221;\u6982\u5ff5<\/li>\n\n\n\n<li><strong>\u5b9e\u8df5\u590d\u6742\u7cfb\u7edf<\/strong>\uff1a\u5728\u5927\u578b\u9879\u76ee\u4e2d\u5e94\u7528\u8fd9\u4e9b\u6982\u5ff5<\/li>\n<\/ol>\n\n\n\n<h3 class=\"wp-block-heading\">\u6700\u7ec8\u601d\u8003<\/h3>\n\n\n\n<p><code>self<\/code>\/<code>this<\/code>\u5173\u952e\u5b57\u662f\u9762\u5411\u5bf9\u8c61\u7f16\u7a0b\u4e2d\u6700\u57fa\u7840\u4e5f\u6700\u6df1\u523b\u7684\u6982\u5ff5\u4e4b\u4e00\u3002\u5b83\u4e0d\u4ec5\u4ec5\u662f\u8bed\u6cd5\u7cd6\uff0c\u66f4\u662f\u5bf9\u8c61\u54f2\u5b66\u7684\u4f53\u73b0\u3002\u7406\u89e3<code>self<\/code>\/<code>this<\/code>\uff0c\u5c31\u662f\u7406\u89e3\u9762\u5411\u5bf9\u8c61\u7f16\u7a0b\u7684\u6838\u5fc3\u3002<\/p>\n\n\n\n<p>\u8bb0\u4f4f\uff0c\u597d\u7684\u9762\u5411\u5bf9\u8c61\u8bbe\u8ba1\u5c31\u50cf\u597d\u7684\u793e\u4f1a\u7ec4\u7ec7\uff1a\u6bcf\u4e2a\u5bf9\u8c61\u90fd\u6709\u660e\u786e\u7684\u81ea\u6211\u610f\u8bc6\uff0c\u77e5\u9053\u81ea\u5df1\u7684\u804c\u8d23\uff0c\u80fd\u591f\u7ba1\u7406\u81ea\u5df1\u7684\u72b6\u6001\uff0c\u5e76\u4e0e\u5176\u4ed6\u5bf9\u8c61\u826f\u597d\u534f\u4f5c\u3002<code>self<\/code>\/<code>this<\/code>\u5c31\u662f\u8fd9\u4e2a\u534f\u4f5c\u7cfb\u7edf\u7684\u57fa\u77f3\u3002<\/p>\n\n\n\n<p>\u9762\u5411\u5bf9\u8c61\u7f16\u7a0b\u4e0d\u4ec5\u662f\u7f16\u5199\u4ee3\u7801\uff0c\u66f4\u662f\u5efa\u7acb\u5bf9\u8c61\u793e\u4f1a\u7684\u8fc7\u7a0b\u3002\u5728\u8fd9\u4e2a\u793e\u4f1a\u4e2d\uff0c<code>self<\/code>\/<code>this<\/code>\u8ba9\u6bcf\u4e2a\u5bf9\u8c61\u90fd\u80fd\u591f\u8bf4\uff1a&#8221;\u6211\u77e5\u9053\u6211\u662f\u8c01\uff0c\u6211\u77e5\u9053\u6211\u8981\u505a\u4ec0\u4e48\u3002&#8221;<\/p>\n\n\n\n<p>\u7b2c\u56db\u5341\u516b\u8bfe\uff1athis\/self\u5173\u952e\u5b57\uff01\u5b8c<\/p>\n","protected":false},"excerpt":{"rendered":"<p>\u7b2c\u56db\u5341\u4e09\u8bfe\uff1a\u62bd\u8c61\u7c7b\u4e0e\u63a5\u53e3\u7684\u5177\u4f53\u533a\u522b \u524d\u8a00\uff1a\u62bd\u8c61\u4e0e\u5951\u7ea6\u7684\u5fae\u5999\u5dee\u5f02 \u5728\u9762\u5411\u5bf9\u8c61\u7f16\u7a0b\u4e2d\uff0c\u62bd\u8c61\u7c7b\u548c\u63a5\u53e3\u90fd\u662f\u5b9e\u73b0\u62bd\u8c61\u548c\u591a [&hellip;]<\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[30],"tags":[],"class_list":["post-1432","post","type-post","status-publish","format-standard","hentry","category-technology-horizon"],"_links":{"self":[{"href":"http:\/\/www.preluna.xyz\/index.php\/wp-json\/wp\/v2\/posts\/1432","targetHints":{"allow":["GET"]}}],"collection":[{"href":"http:\/\/www.preluna.xyz\/index.php\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"http:\/\/www.preluna.xyz\/index.php\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"http:\/\/www.preluna.xyz\/index.php\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"http:\/\/www.preluna.xyz\/index.php\/wp-json\/wp\/v2\/comments?post=1432"}],"version-history":[{"count":3,"href":"http:\/\/www.preluna.xyz\/index.php\/wp-json\/wp\/v2\/posts\/1432\/revisions"}],"predecessor-version":[{"id":1439,"href":"http:\/\/www.preluna.xyz\/index.php\/wp-json\/wp\/v2\/posts\/1432\/revisions\/1439"}],"wp:attachment":[{"href":"http:\/\/www.preluna.xyz\/index.php\/wp-json\/wp\/v2\/media?parent=1432"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"http:\/\/www.preluna.xyz\/index.php\/wp-json\/wp\/v2\/categories?post=1432"},{"taxonomy":"post_tag","embeddable":true,"href":"http:\/\/www.preluna.xyz\/index.php\/wp-json\/wp\/v2\/tags?post=1432"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}