{"id":102,"date":"2026-08-03T13:36:42","date_gmt":"2026-08-03T05:36:42","guid":{"rendered":"https:\/\/www.cloudnote.cc\/?p=102"},"modified":"2026-08-03T13:42:36","modified_gmt":"2026-08-03T05:42:36","slug":"%e3%80%90python%e3%80%91%e7%b1%bb%e4%b8%8e%e5%af%b9%e8%b1%a1","status":"publish","type":"post","link":"https:\/\/www.cloudnote.cc\/index.php\/2026\/08\/03\/%e3%80%90python%e3%80%91%e7%b1%bb%e4%b8%8e%e5%af%b9%e8%b1%a1\/","title":{"rendered":"\u3010Python\u3011\u7c7b\u4e0e\u5bf9\u8c61"},"content":{"rendered":"<p class=\"wp-block-paragraph\">Python \u7684\u7c7b\uff08Class\uff09\u4e0e\u5bf9\u8c61\uff08Object\uff09\u662f\u9762\u5411\u5bf9\u8c61\u7f16\u7a0b\uff08OOP\uff09\u7684\u6838\u5fc3\u3002\u5982\u679c\u7528\u5927\u767d\u8bdd\u6765\u5f62\u5bb9\uff1a\u7c7b\u662f\u201c\u8bbe\u8ba1\u56fe\u7eb8\u201d\uff0c\u5bf9\u8c61\u662f\u6839\u636e\u56fe\u7eb8\u751f\u4ea7\u51fa\u6765\u7684\u201c\u771f\u8f66\u201d\u3002<\/p>\n<h3 class=\"wp-block-heading\">1.\u5b9e\u4f8b\u5c5e\u6027\u4e0e\u5b9e\u4f8b\u65b9\u6cd5<\/h3>\n<p class=\"wp-block-paragraph\">\u8fd9\u662f\u6700\u57fa\u7840\u7684\u6210\u5458\uff0c\u6bcf\u4e2a\u5bf9\u8c61\uff08\u5b9e\u4f8b\uff09\u72ec\u7acb\u62e5\u6709\u4e00\u4efd\u3002<\/p>\n<ul class=\"wp-block-list\">\n<li>\u5b9e\u4f8b\u5c5e\u6027\uff08Instance Attribute\uff09\uff1a<\/li>\n\n<li>\u5b9a\u4e49\u5728 <strong>init<\/strong> \u521d\u59cb\u5316\u65b9\u6cd5\u4e2d\uff0c\u524d\u9762\u5fc5\u987b\u52a0 self.\u3002\u6bcf\u4e2a\u5bf9\u8c61\u7684\u5c5e\u6027\u503c\u53ef\u4ee5\u5404\u4e0d\u76f8\u540c\u3002<\/li>\n\n<li>\u6bcf\u4e2a\u5b9e\u4f8b\u72ec\u7acb\u62e5\u6709,\u6bcf\u521b\u5efa\u4e00\u4e2a\u65b0\u5bf9\u8c61\uff0c\u5c31\u4f1a\u5f00\u8f9f\u4e00\u5757\u65b0\u5185\u5b58\u6765\u5b58\u50a8\u8be5\u5bf9\u8c61\u7684\u72ec\u6709\u6570\u636e\u3002<\/li>\n\n<li>\u5b9e\u4f8b\u65b9\u6cd5\uff08Instance Method\uff09\uff1a<\/li>\n\n<li>\u7c7b\u7684\u666e\u901a\u51fd\u6570\uff0c\u7b2c\u4e00\u4e2a\u53c2\u6570\u5fc5\u987b\u662f self\u3002\u7528\u6765\u64cd\u4f5c\u5177\u4f53\u67d0\u4e2a\u5bf9\u8c61\u7684\u6570\u636e\u3002<\/li>\n\n<li>\u4fdd\u5b58\u5728\u7c7b\u4e2d\uff0c\u5168\u5458\u5171\u4eab,\u5171\u4eab\u65b9\u6cd5\u7684\u4ee3\u7801\u53ea\u5728\u7c7b\u52a0\u8f7d\u65f6\u7f16\u8bd1\u4e00\u6b21\uff0c\u5e76\u5b58\u653e\u5728\u7c7b\u5bf9\u8c61\u4e2d\uff0c\u5b9e\u4f8b\u53ea\u662f\u53bb\u8c03\u7528\u5b83\u3002<\/li>\n<\/ul>\n<p class=\"wp-block-paragraph\"><strong><em>python\u4e00\u5207\u7686\u5bf9\u8c61\uff0c\u5168\u90e8\u5b58\u5728\u4e8e\u5806\u7a7a\u95f4<\/em><\/strong><\/p>\n<p class=\"wp-block-paragraph\">\u4ee3\u7801\u6f14\u793a:<\/p>\n<pre class=\"wp-block-code\"><code>class Animal:\n    def __init__(self, name, color):\n        self.name = name\n        self.color = color\n\n    def speak(self):\n        print(f&quot;{self.color}\u7684{self.name}\u5728\u72c2\u53eb...&quot;)\n\n    def print_info(self):\n        print(&quot;color:&quot;, id(self.color), &quot;name:&quot;, id(self.name))\n\na1 = Animal(&quot;\u5c0f\u9ec4&quot;, &quot;\u9ec4\u8272&quot;)\na1.speak()\na1.print_info()\na2 = Animal(&quot;\u5c0f\u9ed1&quot;, &quot;\u9ed1\u8272&quot;)\na2.speak()\na2.print_info()\n\n# \u83b7\u53d6\u5b83\u4eec\u5e95\u5c42\u7684\u51fd\u6570\u672c\u4f53\nfunc1 = a1.print_info.__func__\nfunc2 = a2.print_info.__func__\n\n# \u9a8c\u8bc1\u5b83\u4eec\u662f\u5426\u662f\u540c\u4e00\u4e2a\u4e1c\u897f\nprint(func1 is func2)  # \u8f93\u51fa: True\n\n# \u5b83\u4eec\u4e5f\u548c\u7c7b\u76f4\u63a5\u8c03\u7528\u65f6\u7684\u51fd\u6570\u662f\u540c\u4e00\u4e2a\nprint(func1 is Animal.print_info)  # \u8f93\u51fa: True<\/code><\/pre>\n<h5 class=\"wp-block-heading\">\u8fd0\u884c\u7ed3\u679c<\/h5>\n<pre class=\"wp-block-code\"><code>\u9ec4\u8272\u7684\u5c0f\u9ec4\u5728\u72c2\u53eb...\ncolor: 4312898880 name: 4312899360\n\u9ed1\u8272\u7684\u5c0f\u9ed1\u5728\u72c2\u53eb...\ncolor: 4312899680 name: 4312899600\nTrue\nTrue<\/code><\/pre>\n<p class=\"wp-block-paragraph\">\u7ed3\u679c\u8868\u660e:<\/p>\n<ul class=\"wp-block-list\">\n<li>\u6240\u6709\u5b9e\u4f8b\u5c5e\u6027\u62e5\u6709\u72ec\u7acb\u5185\u5b58\u7a7a\u95f4<\/li>\n\n<li>\u5b9e\u4f8b\u65b9\u6cd5\u5bf9\u6240\u6709\u5b9e\u4f8b\u5bf9\u8c61\u4e0e\u7c7b\u5171\u7528,\u4f46\u662f\u7c7b\u4e0d\u80fd\u76f4\u63a5\u8c03\u7528,\u9700\u8981\u4f20\u9012\u4e00\u4e2a\u5b9e\u4f8b\u5bf9\u8c61,\u56e0\u4e3a\u5b9e\u4f8b\u65b9\u6cd5\u5305\u542b\u4e00\u4e2aself,\u8fd9\u4e2aself\u5c31\u662f\u5b9e\u4f8b\u5bf9\u8c61\u3002<\/li>\n<\/ul>\n<h3 class=\"wp-block-heading\">2.\u5c5e\u6027\/\u65b9\u6cd5\u4e0e\u547d\u540d\u89c4\u5219<\/h3>\n<p class=\"wp-block-paragraph\">\u5728 Python \u4e2d\uff0c\u5c5e\u6027\u548c\u65b9\u6cd5\u7684\u547d\u540d\u4e25\u683c\u9075\u5faa PEP 8\uff08Python \u5b98\u65b9\u4ee3\u7801\u98ce\u683c\u6307\u5357\uff09[1]\u3002\u5f53\u9047\u5230\u591a\u4e2a\u5355\u8bcd\uff08\u591a\u5b57\u6bcd\uff09\u62fc\u63a5\u65f6\uff0cPython \u7edf\u4e00\u4f7f\u7528\u5c0f\u5199\u5b57\u6bcd + \u4e0b\u4e0b\u5212\u7ebf\uff08snake_case\uff0c\u86c7\u5f62\u547d\u540d\u6cd5\uff09[1]\u3002\u8fd9\u4e0e Java \u6216 JavaScript \u5e38\u89c1\u7684\u9a7c\u5cf0\u547d\u540d\u6cd5\uff08camelCase\uff09\u622a\u7136\u4e0d\u540c\u3002<\/p>\n<ul class=\"wp-block-list\">\n<li>\u666e\u901a<br>\u5982self.name<\/li>\n\n<li>\u7ea6\u5b9a\u79c1\u6709<br>\u4f7f\u7528\u5355\u4e0b\u5212\u7ebf_,\u5982self._price\u3002\u7ea6\u5b9a\u7684\u79c1\u6709\u3002\u5916\u9762\u80fd\u8bfb\u5230\uff0c\u4f46\u76f8\u5f53\u4e8e\u8b66\u544a\u7a0b\u5e8f\u5458\uff1a\u201c\u8fd9\u662f\u5185\u90e8\u79c1\u6709\u53d8\u91cf\uff0c\u522b\u5728\u5916\u9762\u778e\u6539\uff01\u201d<\/li>\n\n<li>\u5f3a\u884c\u79c1\u6709<br>\u4f7f\u7528\u53cc\u4e0b\u5212\u7ebf__,\u5982self.__engine\u3002\u5f3a\u884c\u79c1\u6709\uff08\u540d\u79f0 mangling\uff09\u3002\u5916\u9762\u76f4\u63a5\u8c03\u7528 obj.__engine \u4f1a\u62a5\u9519\uff01<\/li>\n\n<li>\u9b54\u672f\u65b9\u6cd5<br>\u524d\u540e\u4f7f\u7528\u53cc\u4e0b\u5212\u7ebf<strong>,\u5982__init<\/strong>\u3002\u7531 Python \u5185\u6838\u5728\u7279\u5b9a\u65f6\u673a\u81ea\u52a8\u8c03\u7528\uff0c\u7a0b\u5e8f\u5458\u5343\u4e07\u522b\u7528\u8fd9\u79cd\u683c\u5f0f\u81ea\u5b9a\u4e49\u53d8\u91cf\uff01<\/li>\n<\/ul>\n<p class=\"wp-block-paragraph\"><strong><em>\u53cc\u4e0b\u5212\u7ebf\u79c1\u6709\u7684\u5e95\u5c42\u771f\u76f8\uff1a\u540d\u5b57\u91cd\u6574<\/em><\/strong><br>\u5f53\u4f60\u5199 self.<em>_engine = &#8220;V8&#8221; \u65f6\uff0cPython \u89e3\u91ca\u5668\u5728\u7f16\u8bd1\u65f6\uff0c\u4f1a\u81ea\u52a8\u628a\u8fd9\u4e2a\u540d\u5b57\u5077\u5077\u6539\u6389\uff0c\u6539\u6210\u4e86 <\/em>\u7c7b\u540d__engine<\/p>\n<h3 class=\"wp-block-heading\">3.\u7c7b\u5c5e\u6027\u4e0e\u7c7b\u65b9\u6cd5<\/h3>\n<p class=\"wp-block-paragraph\">\u6709\u4e9b\u4e1c\u897f\u4e0d\u5e94\u8be5\u6bcf\u8f86\u8f66\u90fd\u5b58\u4e00\u4efd\uff0c\u800c\u5e94\u8be5\u7531\u201c\u5382\u5bb6\uff08\u7c7b\uff09\u201d\u7edf\u4e00\u7ba1\u7406\uff0c\u8fd9\u5c31\u662f\u7c7b\u7ea7\u522b\u6210\u5458\u3002<\/p>\n<ul class=\"wp-block-list\">\n<li><strong><em>\u7c7b\u5c5e\u6027\uff08Class Attribute\uff09<\/em><\/strong>\uff1a\u76f4\u63a5\u5199\u5728\u7c7b\u91cc\u9762\u3001\u51fd\u6570\u5916\u9762\u7684\u53d8\u91cf\u3002\u6240\u6709\u5bf9\u8c61\u5171\u4eab\u540c\u4e00\u4efd\u5185\u5b58\u3002<\/li>\n\n<li><strong><em>\u7c7b\u65b9\u6cd5\uff08Class Method\uff09<\/em><\/strong>\uff1a\u4f7f\u7528\u88c5\u9970\u5668 @classmethod \u4fee\u9970\uff0c\u7b2c\u4e00\u4e2a\u53c2\u6570\u5fc5\u987b\u662f cls\uff08\u4ee3\u8868\u7c7b\u672c\u8eab\uff09\u3002\u901a\u5e38\u7528\u4e8e\u7f16\u5199\u201c\u5de5\u5382\u6a21\u5f0f\u201d\u6216\u64cd\u4f5c\u7c7b\u5c5e\u6027\u3002<\/li>\n\n<li><strong><em>\u9759\u6001\u65b9\u6cd5\uff08Static Method\uff09<\/em><\/strong>\uff1a\u4f7f\u7528\u88c5\u9970\u5668 @staticmethod \u4fee\u9970\uff0c\u4e0d\u9700\u8981 self \u4e5f\u4e0d\u9700\u8981 cls\u3002\u5b83\u53ea\u662f\u4e00\u4e2a\u6070\u597d\u653e\u5728\u7c7b\u91cc\u9762\u7684\u666e\u901a\u51fd\u6570\uff0c\u901a\u5e38\u7528\u6765\u505a\u5de5\u5177\u51fd\u6570\u3002<\/li>\n<\/ul>\n<p class=\"wp-block-paragraph\">\u4ee3\u7801\u6f14\u793a:<\/p>\n<pre class=\"wp-block-code\"><code>class Robot:\n    count = 0  # \u3010\u7c7b\u5c5e\u6027\u3011\uff1a\u8bb0\u5f55\u4e00\u5171\u751f\u4ea7\u4e86\u591a\u5c11\u4e2a\u673a\u5668\u4eba\n\n    def __init__(self, name):\n        self.name = name  # \u5b9e\u4f8b\u5c5e\u6027\n        Robot.count += 1  # \u6bcf\u6b21\u5b9e\u4f8b\u5316\uff0c\u7c7b\u5c5e\u6027\u52a0 1\n\n    @classmethod\n    def get_total_count(cls):  # \u3010\u7c7b\u65b9\u6cd5\u3011\n        return f&quot;\u5f53\u524d\u5de5\u5382\u4e00\u5171\u751f\u4ea7\u4e86 {cls.count} \u4e2a\u673a\u5668\u4eba\u3002&quot;\n\n    @staticmethod\n    def is_valid_name(name):  # \u3010\u9759\u6001\u65b9\u6cd5\u3011\n        return len(name) &gt; 0  # \u7eaf\u5de5\u5177\u5224\u65ad\n\nr1 = Robot(&quot;\u72d7\u86cb&quot;)\nprint(r1.get_total_count())\nprint(r1.is_valid_name(&quot;\u72d7\u86cb&quot;))\nr2 = Robot(&quot;\u963f\u6cd5\u72d7&quot;)\nprint(r2.get_total_count())\nprint(r2.is_valid_name(&quot;\u72d7\u86cb&quot;))\n\nprint(id(Robot.count), id(r1.count), id(r2.count))\n\nfunc1 = Robot.get_total_count.__func__\nfunc11 = r1.get_total_count.__func__\nfunc12 = r2.get_total_count.__func__\nprint(&quot;func11==func1:&quot;, func11 is func1, &quot;func12==func1:&quot;, func12 is func1)\n\nfunc2 = Robot.is_valid_name\nfunc21 = r1.is_valid_name\nfunc22 = r2.is_valid_name\nprint(&quot;func21==func2:&quot;, func21 is func2, &quot;func22==2:&quot;, func22 is func2)<\/code><\/pre>\n<p class=\"wp-block-paragraph\">Python 3 \u8fdb\u884c\u4e86\u5e95\u5c42\u6027\u80fd\u4f18\u5316\u3002\u5f53 CPU \u987a\u7740\u7c7b\u5b57\u5178\uff08Robot.<strong>dict<\/strong>\uff09\u7ffb\u5230\u9759\u6001\u65b9\u6cd5\u65f6\uff0c\u53d1\u73b0\u5b83\u662f @staticmethod\uff0c\u4f1a\u5728\u5185\u5b58\u4e2d\u76f4\u63a5\u5f53\u573a\u91ca\u653e\uff0c\u628a\u6700\u91cc\u9762\u7684\u666e\u901a\u51fd\u6570\u4e22\u7ed9\u4f60\u3002<br>\u6240\u4ee5is_valid_name\u6ca1\u6709.<strong>func<\/strong>\u540e\u7f00<\/p>\n<h5 class=\"wp-block-heading\">\u6267\u884c\u7ed3\u679c<\/h5>\n<pre class=\"wp-block-code\"><code>\u5f53\u524d\u5de5\u5382\u4e00\u5171\u751f\u4ea7\u4e86 1 \u4e2a\u673a\u5668\u4eba\u3002\nTrue\n\u5f53\u524d\u5de5\u5382\u4e00\u5171\u751f\u4ea7\u4e86 2 \u4e2a\u673a\u5668\u4eba\u3002\nTrue\n4308610008 4308610008 4308610008\nfunc11==func1: True func12==func1: True\nfunc21==func2: True func22==2: True<\/code><\/pre>\n<p class=\"wp-block-paragraph\">\u6839\u636e\u7ed3\u679c\u5f97\u51fa\u5982\u4e0b\u7ed3\u8bba:<\/p>\n<ul class=\"wp-block-list\">\n<li>\u7c7b\u5c5e\u6027\u4e0e\u7c7b\u65b9\u6cd5\u5728\u5185\u5b58\u4e2d\u662f\u5171\u7528\u7684,\u610f\u5473\u7740\u7c7b\u5c5e\u6027\u5728\u4efb\u610f\u5bf9\u8c61\u4e2d\u4fee\u6539\u4f1a\u5f71\u54cd\u6539\u5c5e\u6027\u5168\u5c40\u3002<\/li>\n\n<li>\u7c7b\u65b9\u6cd5\u4e0e\u9759\u6001\u65b9\u6cd5\u4e5f\u662f\u5171\u7528\u7684<\/li>\n\n<li>\u7c7b\u5c5e\u6027\u4e0e\u7c7b\u65b9\u6cd5\u53ca\u9759\u6001\u65b9\u6cd5\u5bf9\u7c7b\u4e0e\u5bf9\u8c61\u90fd\u53ef\u4ee5\u8c03\u7528\u3002<\/li>\n<\/ul>\n<p class=\"wp-block-paragraph\">\u8fd9\u91cc\u6211\u4eec\u5f15\u5165\u4e00\u4e2a\u65b0\u7684\u573a\u666f,\u5982\u679c\u5728\u5b9e\u4f8b\u65b9\u6cd5\u5185\u5b9a\u4e49\u4e86\u4e0e\u7c7b\u5c5e\u6027\u540c\u540d\u53d8\u91cf\u5462?<\/p>\n<pre class=\"wp-block-code\"><code>class Robot:\n    count = 0  # \u3010\u7c7b\u5c5e\u6027\u3011\uff1a\u8bb0\u5f55\u4e00\u5171\u751f\u4ea7\u4e86\u591a\u5c11\u4e2a\u673a\u5668\u4eba\n    count2 = 1\n\n    def __init__(self, name):\n        self.name = name  # \u5b9e\u4f8b\u5c5e\u6027\n        self.count = 200\n\nr1 = Robot(&quot;\u72d7\u86cb&quot;)\nprint(r1.count)\nprint(r1.count2)\n\nr2 = Robot(&quot;\u963f\u6cd5\u72d7&quot;)\nprint(r2.count)\nprint(r2.count2)\n\nprint(Robot.count)\n\nr2.count = 300\nprint(r1.count)\nprint(r2.count)\nprint(Robot.count)\n\nprint(id(r1.count), id(r2.count), id(Robot.count))\n\nr1.count2 = 1000\nprint(r1.count2)\nprint(Robot.count2)<\/code><\/pre>\n<h5 class=\"wp-block-heading\">\u8fd0\u884c\u7ed3\u679c<\/h5>\n<pre class=\"wp-block-code\"><code>200\n1\n200\n1\n0\n200\n300\n0\n4383507608 4385205296 4383501208\n1000\n1<\/code><\/pre>\n<ul class=\"wp-block-list\">\n<li>\u5982\u679c\u5bf9\u8c61\u521d\u59cb\u5316\u65f6\u91cd\u65b0\u58f0\u660e\u4e86\u4e00\u4e2a\u4e0e\u7c7b\u5c5e\u6027\u540c\u540d\u7684\u53d8\u91cf:\u7a0b\u5e8f\u4f1a\u5728\u5185\u4e2d\u5f00\u8f9f\u65b0\u7684\u5185\u5b58\u7a7a\u95f4\u5b58\u653e\u8be5\u53d8\u91cf;\u5916\u90e8\u901a\u8fc7\u5bf9\u8c61\u8c03\u7528\u8be5\u53d8\u91cf\u4f1a\u4f18\u5148\u8c03\u7528\u5bf9\u8c61\u5df2\u7ecf\u5b58\u5728\u7684\u53d8\u91cf,\u4e0d\u4f1a\u518d\u8c03\u7528\u7c7b\u53d8\u91cf,\u540c\u540d\u53d8\u91cf\u7684\u4fee\u6539\u4e0e\u4e5f\u7d27\u53d1\u751f\u5728\u65b0\u5efa\u7684\u53d8\u91cf<\/li>\n\n<li>\u5982\u679c\u5bf9\u8c61\u521d\u59cb\u5316\u65f6\u6ca1\u6709\u5bf9\u5df2\u7ecf\u5b58\u5728\u7684\u7c7b\u5c5e\u6027\u58f0\u660e\u540c\u540d\u53d8\u91cf:\u5bf9\u8c61\u4f1a\u5148\u4ece\u672c\u5bf9\u8c61\u67e5\u627e\u662f\u5426\u5df2\u7ecf\u5b58\u5728,\u6709\u5c31\u8fd4\u56de,\u6ca1\u6709\u5c31\u4ece\u7c7b\u5c5e\u6027\u4e2d\u67e5\u627e\u3002<\/li>\n\n<li>\u5916\u90e8\u521b\u5efa\u7684\u5bf9\u8c61\u793a\u4f8b\u65e0\u6cd5\u4fee\u6539\u7c7b\u5c5e\u6027\u7684\u503c,\u53c2\u8003r1.count2=1000,\u8fd9\u4e2a\u64cd\u4f5c\u5176\u5b9e\u662f\u5728r1\u5bf9\u8c61\u4e2d\u58f0\u660e\u4e86\u540c\u540d\u7684\u793a\u4f8b\u5c5e\u6027,\u4e0e\u7c7b\u5c5e\u6027\u65e0\u5173\u3002\u7c7b\u5c5e\u6027\u7684\u4fee\u6539\u53ea\u80fd\u901a\u8fc7&#8221;\u7c7b.\u5c5e\u6027\u540d&#8221;\u7684\u5f62\u5f0f<\/li>\n<\/ul>\n<p class=\"wp-block-paragraph\">\u603b\u7ed3:<\/p>\n<ul class=\"wp-block-list\">\n<li>\u5916\u90e8\u8c03\u7528\u65f6:\u4f18\u5148\u672c\u5b9e\u4f8b\u5bf9\u8c61\u91cc\u67e5\u627e,\u6ca1\u6709\u518d\u627e\u7c7b\u5c5e\u6027\u662f\u5426\u6709<\/li>\n\n<li>\u5916\u90e8\u5b9e\u4f8b\u5bf9\u5c5e\u6027\u4fee\u6539\u6c38\u8fdc\u4ec5\u9650\u5b9e\u4f8b\u5bf9\u8c61\u672c\u8eab\u5c5e\u6027<\/li>\n\n<li>\u7c7b\u5c5e\u6027\u7684\u7684\u4fee\u6539\u53ea\u80fd\u901a\u8fc7&#8221;\u7c7b.\u5c5e\u6027\u540d&#8221;\u7684\u5f62\u5f0f<\/li>\n<\/ul>\n<h3 class=\"wp-block-heading\">4.\u5404\u5c5e\u6027\u4e0e\u5404\u65b9\u6cd5\u8c03\u7528\u8303\u56f4\u95ee\u9898<\/h3>\n<p class=\"wp-block-paragraph\">\u5728\u5f00\u59cb\u770b\u8303\u56f4\u4e4b\u524d\uff0c\u8bf7\u5728\u8111\u6d77\u4e2d\u5b9a\u683c\u8fd9\u5f20\u5185\u5b58\u5b57\u5178\u5206\u5e03\u56fe\uff1a\u5b9e\u4f8b\u7684\u5b57\u5178 (self.<strong>dict<\/strong>)\uff1a\u53ea\u5b58\u653e \u5b9e\u4f8b\u5c5e\u6027\u3002\u7c7b\u7684\u5b57\u5178 (cls.<strong>dict<\/strong> \/ \u7c7b\u540d.<strong>dict<\/strong>)\uff1a\u5b58\u653e \u5b9e\u4f8b\u65b9\u6cd5\u3001\u7c7b\u5c5e\u6027\u3001\u7c7b\u65b9\u6cd5\u3001\u9759\u6001\u65b9\u6cd5\u3002<\/p>\n<figure class=\"wp-block-table\"><table class=\"has-fixed-layout\"><thead><tr><th>\u6210\u5458\u7c7b\u578b<\/th>\n<th>\u5b9a\u4e49\u65f6\u7684\u7279\u5f81<\/th>\n<th>\u5b9e\u4f8b\u5bf9\u8c61 \u8c03\u7528<\/th>\n<th>\u7c7b\u540d \u76f4\u63a5\u8c03\u7528<\/th><\/tr><\/thead>\n<tbody><tr><td>\u5b9e\u4f8b\u5c5e\u6027<\/td>\n<td><strong>init<\/strong> \u91cc\u5199 self.name<\/td>\n<td>\u5b8c\u5168\u5141\u8bb8<\/td>\n<td>\u7edd\u5bf9\u4e0d\u5141\u8bb8<\/td><\/tr>\n<tr><td>\u7c7b\u5c5e\u6027<\/td>\n<td>\u51fd\u6570\u5916\u76f4\u63a5\u5199<\/td>\n<td>\u5141\u8bb8\u8bfb\u53d6\uff0c\u7981\u6b62\u4fee\u6539<\/td>\n<td>\u5b8c\u5168\u5141\u8bb8<\/td><\/tr>\n<tr><td>\u5b9e\u4f8b\u65b9\u6cd5<\/td>\n<td>\u7b2c\u4e00\u4e2a\u53c2\u6570\u662f self<\/td>\n<td>\u5b8c\u5168\u5141\u8bb8<\/td>\n<td>\u4e0d\u5141\u8bb8\u76f4\u63a5\u8c03\u7528<\/td><\/tr>\n<tr><td>\u7c7b\u65b9\u6cd5<\/td>\n<td>\u5e26 @classmethod\uff0c\u6709 cls<\/td>\n<td>\u5b8c\u5168\u5141\u8bb8<\/td>\n<td>\u5b8c\u5168\u5141\u8bb8<\/td><\/tr>\n<tr><td>\u9759\u6001\u65b9\u6cd5<\/td>\n<td>\u5e26 @staticmethod\uff0c\u65e0\u81ea\u53d8\u91cf<\/td>\n<td>\u5b8c\u5168\u5141\u8bb8<\/td>\n<td>\u5b8c\u5168\u5141\u8bb8<\/td><\/tr><\/tbody><\/table><\/figure>\n<h3 class=\"wp-block-heading\">5.\u7edd\u5bf9\u4e0d\u5141\u8bb8\u7684\u56db\u5927\u786c\u6838\u7981\u533a<\/h3>\n<p class=\"wp-block-paragraph\">\u4ee5\u4e0b\u56db\u79cd\u884c\u4e3a\u5728\u7269\u7406\u5c42\u9762\u4e0a\u662f\u7edd\u5bf9\u884c\u4e0d\u901a\u6216\u8005\u4f1a\u5bfc\u81f4\u707e\u96be\u6027 Bug \u7684\uff1a<\/p>\n<h5 class=\"wp-block-heading\">\u7981\u533a 1\uff1a\u901a\u8fc7\u201c\u7c7b\u540d\u201d\u76f4\u63a5\u8bbf\u95ee\u201c\u5b9e\u4f8b\u5c5e\u6027\u201d<\/h5>\n<ul class=\"wp-block-list\">\n<li>\u4ee3\u7801\u6b7b\u72b6\uff1aRobot.name \u2794 \u62a5 AttributeError\u3002<\/li>\n\n<li>\u5e95\u5c42\u771f\u76f8\uff1a\u5b9e\u4f8b\u5c5e\u6027\u53ea\u5728 r1 = Robot(&#8220;\u5c0f\u5f3a&#8221;) \u6267\u884c\u540e\uff0c\u5b58\u5728\u4e8e r1.<strong>dict<\/strong> \u5806\u5185\u5b58\u4e2d\u3002\u7c7b\u5bf9\u8c61\u81ea\u5df1\u7684\u5b57\u5178\u91cc\u53ea\u6709\u65b9\u6cd5\u548c\u7c7b\u5c5e\u6027\uff0c\u6839\u672c\u6ca1\u6709 name \u8fd9\u4e2a\u952e\uff0c\u7ffb\u7bb1\u5012\u67dc\u4e5f\u627e\u4e0d\u5230\u3002<\/li>\n<\/ul>\n<h5 class=\"wp-block-heading\">\u7981\u533a 2\uff1a\u5728\u201c\u7c7b\u65b9\u6cd5\/\u9759\u6001\u65b9\u6cd5\u201d\u5185\u90e8\u76f4\u63a5\u8c03\u7528\u201c\u5b9e\u4f8b\u5c5e\u6027\/\u5b9e\u4f8b\u65b9\u6cd5\u201d<\/h5>\n<ul class=\"wp-block-list\">\n<li>\u4ee3\u7801\u6b7b\u72b6\uff1a<\/li>\n<\/ul>\n<pre class=\"wp-block-code\"><code>@classmethod\ndef bad_class_method(cls):\n    print(self.name) # \u274c \u5fc5\u6b7b\uff01\u62a5\u9519\uff1aNameError: name 'self' is not defined<\/code><\/pre>\n<ul class=\"wp-block-list\">\n<li>\u5e95\u5c42\u771f\u76f8\uff1a<br>\u7c7b\u65b9\u6cd5\u88ab CPU \u8c03\u7528\u65f6\uff0c\u4f20\u5165\u7684\u662f\u7c7b\u5bf9\u8c61\u672c\u8eab\u7684\u5185\u5b58\u9996\u5730\u5740\uff08\u7ed9 cls\uff09\uff0c\u9759\u6001\u65b9\u6cd5\u66f4\u662f\u4ec0\u4e48\u90fd\u4e0d\u4f20\u3002\u5b83\u4eec\u5728\u8fd0\u884c\u7684\u65f6\u7a7a\u91cc\uff0c\u538b\u6839\u4e0d\u77e5\u9053\u5f53\u524d\u662f\u54ea\u8f86\u201c\u8f66\uff08\u5b9e\u4f8b\uff09\u201d\u5728\u8c03\u7528\u5b83\uff0c\u5b83\u7684\u624b\u91cc\u6ca1\u6709\u5b9e\u4f8b\u5bf9\u8c61\u7684\u5185\u5b58\u6307\u9488\uff0c\u6240\u4ee5\u7edd\u5bf9\u65e0\u6cd5\u5411\u4e0b\u8bbf\u95ee\u5b9e\u4f8b\u7a7a\u95f4\u3002<\/li>\n<\/ul>\n<h5 class=\"wp-block-heading\">\u7981\u533a 3\uff1a\u901a\u8fc7\u201c\u5b9e\u4f8b\u201d\u4fee\u6539\u201c\u7c7b\u5c5e\u6027\u201d<\/h5>\n<ul class=\"wp-block-list\">\n<li>\u4ee3\u7801\u6b7b\u72b6\uff1a<br>r1.count = 99 \uff08\u8bed\u6cd5\u4e0d\u62a5\u9519\uff0c\u4f46\u903b\u8f91\u4f1a\u6b7b\u5f97\u6781\u60e8\uff09\u3002<\/li>\n\n<li>\u5e95\u5c42\u771f\u76f8\uff1a<br>\u4fee\u6539\u7c7b\u5c5e\u6027\uff0c\u5728\u5916\u9762\u5fc5\u987b\u5199 Robot.count = 5\uff0c\u5728\u7c7b\u65b9\u6cd5\u5185\u90e8\u5fc5\u987b\u5199 cls.count = 5\u3002<\/li>\n<\/ul>\n<h5 class=\"wp-block-heading\">\u7981\u533a 4\uff1a\u901a\u8fc7\u201c\u7c7b\u540d\u201d\u4e0d\u4f20\u53c2\u76f4\u63a5\u8c03\u7528\u201c\u5b9e\u4f8b\u65b9\u6cd5\u201d<\/h5>\n<ul class=\"wp-block-list\">\n<li>\u4ee3\u7801\u6b7b\u72b6\uff1a<\/li>\n\n<li>Robot.drive() \u2794 \u62a5\u9519 TypeError: drive() missing 1 required positional argument: &#8216;self&#8217;\u3002<\/li>\n\n<li>\u5e95\u5c42\u771f\u76f8\uff1a<br>\u901a\u8fc7\u5b9e\u4f8b\u8c03\u7528 r1.drive() \u65f6\uff0cPython \u4f1a\u5728\u5e55\u540e\u628a r1 \u6346\u7ed1\u4f5c\u4e3a\u7b2c\u4e00\u4e2a\u53c2\u6570\u585e\u7ed9 self\u3002\u4f46\u5982\u679c\u4f60\u7528\u7c7b\u540d\u76f4\u63a5\u8c03\u7528\uff0cPython \u5e95\u5c42\u7684\u81ea\u52a8\u6346\u7ed1\u9b54\u672f\u5931\u6548\u4e86\uff0c\u6ca1\u4eba\u586b self \u8fd9\u4e2a\u5751\uff0cCPU \u65e0\u6cd5\u6267\u884c\u673a\u5668\u7801\uff0c\u76f4\u63a5\u7f62\u5de5\u62a5\u9519\u3002<\/li>\n<\/ul>\n<h3 class=\"wp-block-heading\">6.\u9b54\u672f\u65b9\u6cd5<\/h3>\n<p class=\"wp-block-paragraph\">\u9b54\u672f\u65b9\u6cd5\uff08Magic Methods\uff09 \u662f Python \u7684\u7279\u6b8a\u65b9\u6cd5\u3002\u5b83\u4eec\u6709\u4e24\u4e2a\u7279\u5f81\uff1a<\/p>\n<ul class=\"wp-block-list\">\n<li>\u540d\u5b57\u524d\u540e\u5404\u6709\u4e24\u4e2a\u4e0b\u5212\u7ebf\uff08\u4f8b\u5982 <strong>init<\/strong>\uff09\u3002<\/li>\n\n<li>\u65e0\u9700\u624b\u52a8\u8c03\u7528\u3002\u5b83\u4eec\u4f1a\u5728\u7279\u5b9a\u7684\u751f\u547d\u5468\u671f\u6216\u9047\u5230\u7279\u5b9a\u8fd0\u7b97\u7b26\u65f6\uff0c\u7531 Python \u81ea\u52a8\u89e6\u53d1\uff08\u4e5f\u53eb\u53cc\u4e0b\u65b9\u6cd5 Dunder Methods\uff09\u3002<br>\u5728 Python \u4e2d\uff0c\u6240\u6709\u7c7b\u7684\u57fa\u7c7b\u90fd\u662f object\u3002\u4f60\u53ef\u4ee5\u901a\u8fc7\u4ee5\u4e0b\u4ee3\u7801\u76f4\u63a5\u6253\u5370\u51fa\u7cfb\u7edf\u81ea\u5e26\u7684\u6240\u6709\u9b54\u672f\u65b9\u6cd5\uff1a<\/li>\n<\/ul>\n<pre class=\"wp-block-code\"><code># 1. \u67e5\u770b\u57fa\u7c7b object \u7684\u6240\u6709\u5c5e\u6027\u548c\u65b9\u6cd5\nprint(dir(object))\n\n# 2. \u8fc7\u6ee4\u51fa\u6240\u6709\u7684\u9b54\u672f\u65b9\u6cd5\nmagic_methods = [m for m in dir(object) if m.startswith('__') and m.endswith('__')]\nprint(magic_methods)<\/code><\/pre>\n<h4 class=\"wp-block-heading\">\u6838\u5fc3\u9b54\u672f\u65b9\u6cd5\u8be6\u89e3<\/h4>\n<h5 class=\"wp-block-heading\">1.\u521d\u59cb\u5316\u4e0e\u9500\u6bc1\uff08\u751f\u547d\u5468\u671f\uff09<\/h5>\n<p class=\"wp-block-paragraph\">(1)<strong>init<\/strong>(self, \u2026)\uff1a<br>\u521d\u59cb\u5316\u65b9\u6cd5\u3002\u6700\u5e38\u7528\u3002\u5f53 <strong>new<\/strong> \u521b\u5efa\u597d\u5bf9\u8c61\u540e\uff0c\u7d27\u63a5\u7740\u8c03\u7528\u5b83\u6765\u7ed9\u5bf9\u8c61\u7ed1\u5b9a\u5c5e\u6027\u3002<br>\u793a\u4f8b:<\/p>\n<pre class=\"wp-block-code\"><code>class Animal:\n\n    def __init__(self, name):\n        self.name = name\n\na1 = Animal(&quot;\u5c0f\u9ec4&quot;)<\/code><\/pre>\n<p class=\"wp-block-paragraph\">\u7528\u6765\u521d\u59cb\u5316\u5bf9\u8c61\u64cd\u4f5c\uff0c\u771f\u6b63\u521b\u5efa\u5bf9\u8c61\u662f\u4e0b\u9762\u7684<strong>new<\/strong>\u65b9\u6cd5<br>(2)<strong>new<\/strong>(cls, *args, **kwargs)\uff1a<br>\u771f\u6b63\u521b\u5efa\u5b9e\u4f8b\u7684\u65b9\u6cd5\u3002\u5728\u5185\u5b58\u4e2d\u5f00\u8f9f\u7a7a\u95f4\uff0c\u8fd4\u56de\u5b9e\u4f8b\u5bf9\u8c61\u3002\u5e38\u7528\u4e8e\u5355\u4f8b\u6a21\u5f0f\u3002<br>\u793a\u4f8b:<\/p>\n<pre class=\"wp-block-code\"><code>class Animal:\n\n    def __init__(self, name):\n        print(&quot;__init__\u65b9\u6cd5\u88ab\u8c03\u7528\u4e86...&quot;)\n        self.name = name\n\n    def __new__(cls, *args, **kwargs):\n        instance = super().__new__(cls)\n        print(&quot;__new__\u65b9\u6cd5\u88ab\u8c03\u7528\u4e86...&quot;)\n        return instance\n\na1 = Animal(&quot;\u5c0f\u9ec4&quot;)<\/code><\/pre>\n<h5 class=\"wp-block-heading\">\u8fd0\u884c\u7ed3\u679c<\/h5>\n<pre class=\"wp-block-code\"><code>__new__\u65b9\u6cd5\u88ab\u8c03\u7528\u4e86...\n__init__\u65b9\u6cd5\u88ab\u8c03\u7528\u4e86...<\/code><\/pre>\n<p class=\"wp-block-paragraph\">\u7ed3\u679c\u663e\u793a:\u5148\u8c03\u7528<strong>new<\/strong>\u65b9\u6cd5\u521b\u5efa\u5bf9\u8c61,\u518d\u8c03\u7528<strong>init<\/strong>\u65b9\u6cd5\u521d\u59cb\u5316\u5bf9\u8c61\u3002<\/p>\n<p class=\"wp-block-paragraph\">\u57fa\u4e8e<strong>new<\/strong>\u5b9e\u73b0\u5355\u4f8b\u6a21\u5f0f:<\/p>\n<pre class=\"wp-block-code\"><code>class Animal:\n    _instance = None\n\n    def __init__(self, name):\n        self.name = name\n\n    def __new__(cls, *args, **kwargs):\n        if cls._instance is None:\n            cls._instance = super().__new__(cls)\n        return cls._instance\n\na1 = Animal(&quot;\u5c0f\u9ec4&quot;)\nprint(f&quot;a1 \u7684\u5185\u5b58\u5730\u5740: {id(a1)}\\n&quot;)\n\na2 = Animal(&quot;\u5c0f\u9ed1&quot;)\nprint(f&quot;a2 \u7684\u5185\u5b58\u5730\u5740: {id(a2)}\\n&quot;)\n\nprint(&quot;a1 \u548c a2 \u662f\u5b8c\u5168\u540c\u4e00\u4e2a\u5185\u5b58\u5bf9\u8c61\u5417\uff1f&quot;, a1 is a2)\nprint(&quot;\u73b0\u5728 a1 \u7684\u540d\u79f0\u662f\u4ec0\u4e48\uff1f&quot;, a1.name)<\/code><\/pre>\n<h5 class=\"wp-block-heading\">\u8fd0\u884c\u7ed3\u679c<\/h5>\n<pre class=\"wp-block-code\"><code>a1 \u7684\u5185\u5b58\u5730\u5740: 4375882608\n\na2 \u7684\u5185\u5b58\u5730\u5740: 4375882608\n\na1 \u548c a2 \u662f\u5b8c\u5168\u540c\u4e00\u4e2a\u5185\u5b58\u5bf9\u8c61\u5417\uff1f True\n\u73b0\u5728 a1 \u7684\u540d\u79f0\u662f\u4ec0\u4e48\uff1f \u5c0f\u9ed1<\/code><\/pre>\n<p class=\"wp-block-paragraph\">\u8fd0\u884c\u7ed3\u679c\u663e\u793aa1,a2 \u662f\u540c\u4e00\u4e2a\u5185\u5b58\u5bf9\u8c61,\u6700\u7ec8name\u662f\u5c0f\u9ed1,\u4e0d\u662f\u5c0f\u9ec4<br>\u5355\u4f8b\u6a21\u5f0f\u5e38\u7528\u4e8e\u6570\u636e\u5e93\u8fde\u63a5\u6c60\u3001\u65e5\u5fd7\u8bb0\u5f55\u5668\u6216\u914d\u7f6e\u8bfb\u53d6\u5668\uff0c\u80fd\u6781\u5927\u8282\u7701\u5185\u5b58<\/p>\n<p class=\"wp-block-paragraph\">(3)<strong>del<\/strong>(self)\uff1a<br>\u6790\u6784\u65b9\u6cd5\u3002\u5f53\u5bf9\u8c61\u88ab\u5783\u573e\u56de\u6536\u5668\u9500\u6bc1\u524d\uff08\u5f15\u7528\u8ba1\u6570\u5f52\u96f6\uff09\u81ea\u52a8\u8c03\u7528\u3002\u5f53\u4e00\u4e2a\u5bf9\u8c61\u5728\u5185\u5b58\u4e2d\u88ab\u5f7b\u5e95\u9500\u6bc1\u65f6\uff08\u5373\u5f15\u7528\u8ba1\u6570\u5f52\u96f6\uff0c\u6216\u8005\u7a0b\u5e8f\u9000\u51fa\u65f6\uff09\uff0cPython \u7684\u5783\u573e\u56de\u6536\u673a\u5236\u4f1a\u81ea\u52a8\u89e6\u53d1\u5e76\u6267\u884c\u8fd9\u4e2a\u65b9\u6cd5 [1]\u3002\u5b83\u901a\u5e38\u7528\u6765\u505a\u4e00\u4e9b\u6536\u5c3e\u5de5\u4f5c\uff0c\u6bd4\u5982\u5173\u95ed\u6587\u4ef6\u3001\u65ad\u5f00\u6570\u636e\u5e93\u8fde\u63a5\u7b49\u3002\u4e0b\u9762\u7528\u4e00\u4e2a\u76f4\u89c2\u7684\u573a\u666f\uff08\u6a21\u62df\u6e38\u620f\u89d2\u8272\u4e0b\u7ebf\uff09\u6765\u4e3a\u4f60\u6f14\u793a <strong>del<\/strong> \u7684\u89e6\u53d1\u673a\u5236\uff0c\u4ee5\u53ca\u5982\u4f55\u901a\u8fc7 del \u5173\u952e\u5b57\u624b\u52a8\u89e6\u53d1\u5b83\u3002<\/p>\n<pre class=\"wp-block-code\"><code>import time\n\nclass GameRole:\n    def __init__(self, name):\n        self.name = name\n        print(f&quot;\ud83c\udfae \u89d2\u8272 [{self.name}] \u6210\u529f\u767b\u5f55\u6e38\u620f\uff01&quot;)\n\n    def __del__(self):\n        # \u5bf9\u8c61\u88ab\u9500\u6bc1\u65f6\u81ea\u52a8\u6267\u884c\n        print(f&quot;\u274c \ud83d\udd34 \u8b66\u544a\uff1a\u89d2\u8272 [{self.name}] \u5df2\u88ab\u9500\u6bc1\uff0c\u5185\u5b58\u5df2\u91ca\u653e\uff01&quot;)\n\nprint(&quot;--- \u5b9e\u9a8c 1\uff1a\u7a0b\u5e8f\u7ed3\u675f\u65f6\u81ea\u52a8\u9500\u6bc1 ---&quot;)\nplayer1 = GameRole(&quot;\u4e9a\u745f&quot;)\nprint(&quot;\u6e38\u620f\u8fd0\u884c\u4e2d...&quot;)\n# \u6ce8\u610f\uff1a\u8fd9\u91cc\u6211\u4eec\u6ca1\u6709\u624b\u52a8\u5220\u6389 player1\uff0c\u4f46\u5f53\u7a0b\u5e8f\u8fd0\u884c\u5230\u6700\u540e\u4e00\u884c\u7ed3\u675f\u65f6\uff0c\n# Python \u4f1a\u6e05\u7a7a\u5185\u5b58\uff0c\u6b64\u65f6\u4f1a\u81ea\u52a8\u89e6\u53d1 player1 \u7684 __del__\n\nprint(&quot;\\n--- \u5b9e\u9a8c 2\uff1a\u624b\u52a8\u4f7f\u7528 del \u5173\u952e\u5b57\u65ad\u5f00\u5f15\u7528 ---&quot;)\nplayer2 = GameRole(&quot;\u59b2\u5df1&quot;)\nplayer3 = player2  # player3 \u4e5f\u6307\u5411\u540c\u4e00\u4e2a&ldquo;\u59b2\u5df1&rdquo;\u5bf9\u8c61\uff08\u5f15\u7528\u8ba1\u6570 = 2\uff09\n\nprint(&quot;\u5c1d\u8bd5\u7b2c\u4e00\u6b21\u5220\u9664 player2...&quot;)\ndel player2  # \u53ea\u662f\u65ad\u5f00\u4e86 player2 \u8fd9\u4e2a\u540d\u5b57\u7684\u5f15\u7528\uff0c\u5bf9\u8c61\u5728\u5185\u5b58\u91cc\u8fd8\u6ca1\u6b7b\uff01\nprint(&quot;\u6b64\u65f6 __del__ \u5e76\u6ca1\u6709\u89e6\u53d1\uff0c\u56e0\u4e3a player3 \u8fd8\u6307\u7740\u5979\u5462\u3002&quot;)\n\nprint(&quot;\u5c1d\u8bd5\u7b2c\u4e8c\u6b21\u5220\u9664 player3...&quot;)\ndel player3  # \u6700\u540e\u4e00\u4e2a\u5f15\u7528\u4e5f\u88ab\u65ad\u5f00\u4e86\uff08\u5f15\u7528\u8ba1\u6570\u5f52\u96f6\uff09\uff0c\u5bf9\u8c61\u5f7b\u5e95\u6b7b\u4ea1\uff01\ntime.sleep(0.5) # \u7a0d\u5fae\u7b49\u5f85\uff0c\u8ba9\u63a7\u5236\u53f0\u6253\u5370\u987a\u5e8f\u66f4\u6e05\u6670\n\nprint(&quot;\\n--- \u7a0b\u5e8f\u5f7b\u5e95\u7ed3\u675f ---&quot;)<\/code><\/pre>\n<h5 class=\"wp-block-heading\">\u8fd0\u884c\u7ed3\u679c<\/h5>\n<pre class=\"wp-block-code\"><code>--- \u5b9e\u9a8c 1\uff1a\u7a0b\u5e8f\u7ed3\u675f\u65f6\u81ea\u52a8\u9500\u6bc1 ---\n\ud83c\udfae \u89d2\u8272 [\u4e9a\u745f] \u6210\u529f\u767b\u5f55\u6e38\u620f\uff01\n\u6e38\u620f\u8fd0\u884c\u4e2d...\n\n--- \u5b9e\u9a8c 2\uff1a\u624b\u52a8\u4f7f\u7528 del \u5173\u952e\u5b57\u65ad\u5f00\u5f15\u7528 ---\n\ud83c\udfae \u89d2\u8272 [\u59b2\u5df1] \u6210\u529f\u767b\u5f55\u6e38\u620f\uff01\n\u5c1d\u8bd5\u7b2c\u4e00\u6b21\u5220\u9664 player2...\n\u6b64\u65f6 __del__ \u5e76\u6ca1\u6709\u89e6\u53d1\uff0c\u56e0\u4e3a player3 \u8fd8\u6307\u7740\u5979\u5462\u3002\n\u5c1d\u8bd5\u7b2c\u4e8c\u6b21\u5220\u9664 player3...\n\u274c \ud83d\udd34 \u8b66\u544a\uff1a\u89d2\u8272 [\u59b2\u5df1] \u5df2\u88ab\u9500\u6bc1\uff0c\u5185\u5b58\u5df2\u91ca\u653e\uff01\n\n--- \u7a0b\u5e8f\u5f7b\u5e95\u7ed3\u675f ---\n\u274c \ud83d\udd34 \u8b66\u544a\uff1a\u89d2\u8272 [\u4e9a\u745f] \u5df2\u88ab\u9500\u6bc1\uff0c\u5185\u5b58\u5df2\u91ca\u653e\uff01<\/code><\/pre>\n<h5 class=\"wp-block-heading\">2.\u6bd4\u8f83\u8fd0\u7b97\u7b26<\/h5>\n<p class=\"wp-block-paragraph\">\u5f53\u4f60\u5bf9\u4e24\u4e2a\u5bf9\u8c61\u4f7f\u7528 &gt;\u3001&lt;\u3001== \u65f6\uff0cPython \u5e95\u5c42\u4f1a\u8c03\u7528\u5bf9\u5e94\u7684\u9b54\u672f\u65b9\u6cd5\uff1a (1)<strong>eq<\/strong>(self, other)\uff1a\u5bf9\u5e94 ==\uff08\u5224\u65ad\u662f\u5426\u76f8\u7b49\uff09\u3002 (2)<strong>ne<\/strong>(self, other)\uff1a\u5bf9\u5e94 !=\uff08\u5224\u65ad\u662f\u5426\u4e0d\u7b49\uff09\u3002 (3)<strong>lt<\/strong>(self, other)\uff1a\u5bf9\u5e94 &lt;\uff08\u5c0f\u4e8e\uff09\u3002 (4)<strong>le<\/strong>(self, other)\uff1a\u5bf9\u5e94 &lt;=\uff08\u5c0f\u4e8e\u7b49\u4e8e\uff09\u3002 (5)<strong>gt<\/strong>(self, other)\uff1a\u5bf9\u5e94 &gt;\uff08\u5927\u4e8e\uff09\u3002<br>(6)<strong>ge<\/strong>(self, other)\uff1a\u5bf9\u5e94 &gt;=\uff08\u5927\u4e8e\u7b49\u4e8e\uff09\u3002<\/p>\n<pre class=\"wp-block-code\"><code>class Product:\n    def __init__(self, name, price):\n        self.name = name\n        self.price = price\n\n    # 1. \u5bf9\u5e94 ==\n    def __eq__(self, other):\n        if isinstance(other, Product):\n            return self.price == other.price\n        return False\n\n    # 2. \u5bf9\u5e94 !=\n    def __ne__(self, other):\n        if isinstance(other, Product):\n            return self.price != other.price\n        return True\n\n    # 3. \u5bf9\u5e94 &lt;\n    def __lt__(self, other):\n        if isinstance(other, Product):\n            return self.price &lt; other.price\n        return NotImplemented\n\n    # 4. \u5bf9\u5e94 &lt;=\n    def __le__(self, other):\n        if isinstance(other, Product):\n            return self.price &lt;= other.price\n        return NotImplemented\n\n    # 5. \u5bf9\u5e94 &gt;\n    def __gt__(self, other):\n        if isinstance(other, Product):\n            return self.price &gt; other.price\n        return NotImplemented\n\n    # 6. \u5bf9\u5e94 &gt;=\n    def __ge__(self, other):\n        if isinstance(other, Product):\n            return self.price &gt;= other.price\n        return NotImplemented\n\n# --- \u8fd0\u884c\u6d4b\u8bd5 ---\np1 = Product(&quot;\u9f20\u6807&quot;, 50)\np2 = Product(&quot;\u952e\u76d8&quot;, 150)\np3 = Product(&quot;\u8033\u673a&quot;, 50)\n\nprint(&quot;--- (1) \u9a8c\u8bc1 __eq__ (==) ---&quot;)\nprint(p1 == p3)  # True (\u4ef7\u683c\u90fd\u662f 50)\nprint(p1 == p2)  # False\n\nprint(&quot;\\n--- (2) \u9a8c\u8bc1 __ne__ (!=) ---&quot;)\nprint(p1 != p2)  # True (\u4ef7\u683c\u4e0d\u7b49)\nprint(p1 != p3)  # False\n\nprint(&quot;\\n--- (3) \u9a8c\u8bc1 __lt__ (&lt;) ---&quot;)\nprint(p1 &lt; p2)   # True (50 &lt; 150)\n\nprint(&quot;\\n--- (4) \u9a8c\u8bc1 __le__ (&lt;=) ---&quot;)\nprint(p1 &lt;= p3)  # True (50 &lt;= 50)\n\nprint(&quot;\\n--- (5) \u9a8c\u8bc1 __gt__ (&gt;) ---&quot;)\nprint(p2 &gt; p1)   # True (150 &gt; 50)\n\nprint(&quot;\\n--- (6) \u9a8c\u8bc1 __ge__ (&gt;=) ---&quot;)\nprint(p3 &gt;= p1)  # True (50 &gt;= 50)<\/code><\/pre>\n<h5 class=\"wp-block-heading\">\u8fd0\u884c\u7ed3\u679c<\/h5>\n<pre class=\"wp-block-code\"><code>--- (1) \u9a8c\u8bc1 __eq__ (==) ---\nTrue\nFalse\n\n--- (2) \u9a8c\u8bc1 __ne__ (!=) ---\nTrue\nFalse\n\n--- (3) \u9a8c\u8bc1 __lt__ (&lt;) ---\nTrue\n\n--- (4) \u9a8c\u8bc1 __le__ (&lt;=) ---\nTrue\n\n--- (5) \u9a8c\u8bc1 __gt__ (&gt;) ---\nTrue\n\n--- (6) \u9a8c\u8bc1 __ge__ (&gt;=) ---\nTrue<\/code><\/pre>\n<h5 class=\"wp-block-heading\">3. \u5c5e\u6027\u63a7\u5236(\u52a8\u6001\u62e6\u622a\u5c5e\u6027\u8bbf\u95ee)<\/h5>\n<p class=\"wp-block-paragraph\">(1)<strong>getattr<\/strong>(self, name)\uff1a<br>\u5f53\u5916\u90e8\u8bbf\u95ee\u4e00\u4e2a\u4e0d\u5b58\u5728\u7684\u5c5e\u6027\u65f6\u89e6\u53d1\u3002\u8fd9\u4e2a\u6709\u8fd4\u56de\u503c,\u5982\u679c\u4e0d\u5199return\u9ed8\u8ba4\u8fd4\u56deNone<br>\u793a\u4f8b:<\/p>\n<pre class=\"wp-block-code\"><code>class Animal:\n\n    def __init__(self, name):\n        self.name = name\n\n    def __getattr__(self, name):\n        print(&quot;\u5c5e\u6027&quot;, name, &quot;\u4e0d\u5b58\u5728&quot;)\n\na1 = Animal(&quot;\u5c0f\u9ec4&quot;)\nprint(a1.name)\nprint(a1.color)<\/code><\/pre>\n<h5 class=\"wp-block-heading\">\u8fd0\u884c\u7ed3\u679c<\/h5>\n<pre class=\"wp-block-code\"><code>\u5c0f\u9ec4\n\u5c5e\u6027 color \u4e0d\u5b58\u5728\nNone<\/code><\/pre>\n<p class=\"wp-block-paragraph\">\u5f53\u6253\u5370\u4e0d\u5b58\u5728\u5c5e\u6027\u65f6,\u8c03\u7528\u4e86<strong>getattr<\/strong>\u65b9\u6cd5\u5e76\u8fd4\u56deNone<\/p>\n<p class=\"wp-block-paragraph\">(2)<strong>getattribute<\/strong>(self, name)\uff1a<br>\u65e0\u8bba\u5c5e\u6027\u5b58\u4e0d\u5b58\u5728\uff0c\u53ea\u8981\u6709\u4eba\u70b9\uff08obj.name\uff09\u5c31\u4e00\u5b9a\u4f1a\u89e6\u53d1\u3002\u8fd9\u4e2a\u6709\u8fd4\u56de\u503c,\u5982\u679c\u4e0d\u5199return\u9ed8\u8ba4\u8fd4\u56deNone<br>\u793a\u4f8b:<\/p>\n<pre class=\"wp-block-code\"><code>class Animal:\n\n    def __init__(self, name):\n        self.name = name\n\n    def __getattribute__(self, name):\n        print(&quot;__getattribute__\u88ab\u8c03\u7528,name=&quot;, name)\n\na1 = Animal(&quot;\u5c0f\u9ec4&quot;)\nprint(a1.name)\nprint(a1.color)<\/code><\/pre>\n<h5 class=\"wp-block-heading\">\u8fd0\u884c\u7ed3\u679c<\/h5>\n<pre class=\"wp-block-code\"><code>__getattribute__\u88ab\u8c03\u7528,name= name\nNone\n__getattribute__\u88ab\u8c03\u7528,name= color\nNone<\/code><\/pre>\n<p class=\"wp-block-paragraph\">(3)<strong>setattr<\/strong>(self, name, value)\uff1a<br>\u5f53\u7ed9\u5c5e\u6027\u8d4b\u503c\uff08obj.name = value\uff09\u65f6\u89e6\u53d1\u3002<\/p>\n<pre class=\"wp-block-code\"><code>class Animal:\n\n    def __init__(self, name):\n        self.name = name\n\n    def __setattr__(self, name, value):\n        print(&quot;__setattr__\u88ab\u8c03\u7528,name =&quot;, name, &quot;value =&quot;, value)\n        super().__setattr__(name, value)\n\na1 = Animal(&quot;\u5c0f\u9ec4&quot;)\na1.color = &quot;\u7ea2\u8272&quot;\na1.name = &quot;\u5c0f\u9ed1&quot;<\/code><\/pre>\n<h5 class=\"wp-block-heading\">\u8fd0\u884c\u7ed3\u679c<\/h5>\n<pre class=\"wp-block-code\"><code>__setattr__\u88ab\u8c03\u7528,name = name value = \u5c0f\u9ec4\n__setattr__\u88ab\u8c03\u7528,name = color value = \u7ea2\u8272\n__setattr__\u88ab\u8c03\u7528,name = name value = \u5c0f\u9ed1<\/code><\/pre>\n<ul class=\"wp-block-list\">\n<li>\u53ea\u8981\u6709\u4efb\u4f55\u5730\u65b9\u6267\u884c\u4e86 \u5bf9\u8c61.\u5c5e\u6027 = \u503c \u7684\u8d4b\u503c\u64cd\u4f5c\uff0cPython \u5c31\u4f1a\u7acb\u523b\u81ea\u52a8\u62e6\u622a\u5e76\u8f6c\u53bb\u8c03\u7528\u4f60\u5199\u7684 <strong>setattr<\/strong> \u9b54\u672f\u65b9\u6cd5\u3002\u65e0\u8bba\u662f\u5728<strong>init<\/strong>\u8fd8\u662f\u5728\u7c7b\u5916\u90e8\u90fd\u4f1a\u51fa\u53d1<\/li>\n\n<li>\u89e6\u53d1 <strong>setattr<\/strong><\/li>\n<\/ul>\n<p class=\"wp-block-paragraph\"><strong><em><strong>init<\/strong>\u65b9\u6cd5\u91cc self.name = name\u5e95\u5c42\u903b\u8f91<\/em><\/strong><\/p>\n<p class=\"wp-block-paragraph\">1.\u7b2c\u4e00\u6b65\uff1a\u7406\u89e3 self \u548c name \u5206\u522b\u662f\u4ec0\u4e48<\/p>\n<ul class=\"wp-block-list\">\n<li>self \u662f\u4e00\u4e2a\u5185\u5b58\u6307\u9488\uff1a\u5b83\u662f\u4e4b\u524d\u7531 <strong>new<\/strong> \u65b9\u6cd5\u5728\u5806\u5185\u5b58\u4e2d\u5f00\u8f9f\u597d\u7684\u4e00\u5757\u7a7a\u767d\u5bf9\u8c61\u7684\u5730\u5740\u3002<\/li>\n\n<li>\u53f3\u8fb9\u7684 name \u662f\u5c40\u90e8\u53d8\u91cf\uff1a\u5b83\u662f\u4f60\u4f20\u5165\u7684\u5b57\u7b26\u4e32\u5bf9\u8c61\uff08\u6bd4\u5982 &#8220;\u5c0f\u9ec4&#8221;\uff09\u7684\u5185\u5b58\u5730\u5740\u3002<\/li>\n<\/ul>\n<p class=\"wp-block-paragraph\">2.\u7b2c\u4e8c\u6b65\uff1a\u5e95\u5c42\u6838\u5fc3\u673a\u5236 \u2014\u2014 \u5c5e\u6027\u5b57\u5178 <strong>dict<\/strong><br>\u5728 Python \u4e2d\uff0c\u51e0\u4e4e\u6bcf\u4e2a\u5b9e\u4f8b\u5bf9\u8c61\u5728\u5e95\u5c42\u90fd\u6709\u4e00\u4e2a\u9690\u85cf\u7684\u5b57\u5178\uff0c\u53eb\u505a <strong>dict<\/strong>\uff0c\u4e13\u95e8\u7528\u6765\u5b58\u50a8\u8be5\u5b9e\u4f8b\u7684\u6240\u6709\u5c5e\u6027\u3002\u5f53\u4f60\u5199\u4e0b self.name = name \u65f6\uff0cPython \u5e95\u5c42\u5b9e\u9645\u4e0a\u88ab\u7ffb\u8bd1\u6210\u4e86\u5bf9\u8fd9\u4e2a\u5b57\u5178\u7684\u8d4b\u503c\u64cd\u4f5c\uff1a<\/p>\n<pre class=\"wp-block-code\"><code># \u8bed\u6cd5\u7cd6\uff1aself.name = name\n# \u5e95\u5c42\u7b49\u4ef7\u4e8e\uff1a\nself.__dict__['name'] = name<\/code><\/pre>\n<p class=\"wp-block-paragraph\">(1)Python \u6839\u636e self \u7684\u6307\u9488\u627e\u5230\u8be5\u5b9e\u4f8b\u5728\u5806\u4e2d\u7684\u5185\u5b58\u5757\u3002<br>(2)\u627e\u5230\u8be5\u5b9e\u4f8b\u7684 <strong>dict<\/strong> \u5c5e\u6027\u7a7a\u95f4\u3002<br>(3)\u5728\u5b57\u5178\u4e2d\u521b\u5efa\u4e00\u4e2a\u952e\uff08Key\uff09\u4e3a &#8220;name&#8221;\uff0c\u5e76\u5c06\u5176\u503c\uff08Value\uff09\u6307\u5411\u5b57\u7b26\u4e32 &#8220;\u5c0f\u9ec4&#8221; \u7684\u5185\u5b58\u5730\u5740\u3002<\/p>\n<p class=\"wp-block-paragraph\">3.\u7b2c\u4e09\u6b65\uff1a\u89e6\u53d1 <strong>setattr<\/strong> \u62e6\u622a\u7ba1\u9053<br>\u5728\u7b2c\u4e8c\u6b65\u53d1\u751f\u4e4b\u524d\uff0cPython \u8fd8\u8bbe\u7f6e\u4e86\u4e00\u9053\u8fc7\u6ee4\u7f51\uff0c\u4e5f\u5c31\u662f\u4f60\u521a\u521a\u63a5\u89e6\u8fc7\u7684 <strong>setattr<\/strong> \u9b54\u672f\u65b9\u6cd5\u3002\u6574\u4e2a\u8d4b\u503c\u7684\u5b8c\u6574\u8c03\u7528\u94fe\u8def\u5982\u4e0b\uff1a<\/p>\n<pre class=\"wp-block-code\"><code>\u4ee3\u7801\u6267\u884c\uff1aself.name = &quot;\u5c0f\u9ec4&quot;\n   \u2502\n   \u25bc\nPython \u68c0\u67e5\u5f53\u524d\u7c7b\u662f\u5426\u91cd\u5199\u4e86 __setattr__\n   \u2502\n   \u251c\u2500\u2500\u25ba [\u6709\u91cd\u5199] \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u25ba \u6267\u884c\u4f60\u5199\u7684 __setattr__ \u903b\u8f91\n   \u2502                                           (\u5fc5\u987b\u5728\u5185\u90e8\u8c03\u7528 super().__setattr__ \u624d\u80fd\u5b58\u76d8)\n   \u2502\n   \u2514\u2500\u2500\u25ba [\u6ca1\u6709\u91cd\u5199 (\u9ed8\u8ba4\u60c5\u51b5)] \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u25ba \u8c03\u7528\u57fa\u7c7b object \u7684\u9ed8\u8ba4 __setattr__\n                                               \u2502\n                                               \u25bc\n                                         \u5e95\u5c42\u7684 C \u8bed\u8a00\u4ee3\u7801\u76f4\u63a5\u64cd\u4f5c\uff1a\n                                         self.__dict__[&quot;name&quot;] = &quot;\u5c0f\u9ec4&quot;<\/code><\/pre>\n<p class=\"wp-block-paragraph\">\u5916\u90e8\u6267\u884c \u5bf9\u8c61.\u5c5e\u6027 = \u503c \u7684\u5e95\u5c42\u903b\u8f91\uff0c\u4e0e\u5728 <strong>init<\/strong> \u5185\u90e8\u6267\u884c self.name = name \u7684\u6838\u5fc3\u94fe\u8def\u5b8c\u5168\u4e00\u6a21\u4e00\u6837\u3002<br>\u5f53\u4f60\u5199\u4e0b a1.age = 3 \u65f6\uff0cPython \u89e3\u91ca\u5668\u5728\u5e95\u5c42\u7684\u8fd0\u4f5c\u6d41\u7a0b\u5982\u4e0b\uff1a<\/p>\n<pre class=\"wp-block-code\"><code>\u4ee3\u7801\u6267\u884c\uff1aa1.age = 3\n   \u2502\n   \u25bc\n1. \u5bfb\u627e\u5bf9\u8c61\uff1aPython \u901a\u8fc7\u53d8\u91cf\u540d a1 \u627e\u5230\u5b83\u5728\u5806\u5185\u5b58\u4e2d\u7684\u5b9e\u4f8b\u5bf9\u8c61\u3002\n   \u2502\n   \u25bc\n2. \u89e6\u53d1\u62e6\u622a\uff1aPython \u81ea\u52a8\u8c03\u7528\u8be5\u5bf9\u8c61\u6240\u5c5e\u7c7b\uff08Animal\uff09\u4e2d\u7684 __setattr__ \u65b9\u6cd5\u3002\n   \u2502\n   \u251c\u2500\u2500\u25ba \u9690\u5f0f\u8f6c\u6362\uff1a\u5c06 a1.age = 3 \u8f6c\u6362\u4e3a Animal.__setattr__(a1, 'age', 3) \n   \u2502\n   \u25bc\n3. \u5b58\u5165\u5185\u5b58\uff1a\u5982\u679c\u6ca1\u6709\u88ab\u4f60\u81ea\u5b9a\u4e49\u7684\u903b\u8f91\u62e6\u622a\uff0c\u6700\u7ec8\u4f1a\u901a\u8fc7\u57fa\u7c7b object \u5199\u5165\uff1a\n   \u2502   \n   \u2514\u2500\u2500\u25ba a1.__dict__['age'] = 3<\/code><\/pre>\n<p class=\"wp-block-paragraph\">(4)<strong>delattr<\/strong>(self, name)\uff1a<br>\u5f53\u5220\u9664\u5c5e\u6027\u65f6\u89e6\u53d1\u3002<br>\u793a\u4f8b:<\/p>\n<pre class=\"wp-block-code\"><code>class Robot:\n    def __init__(self, name, battery):\n        self.name = name          # \u666e\u901a\u5c5e\u6027\n        self.battery = battery    # \u6838\u5fc3\u5c5e\u6027\uff08\u4e0d\u5141\u8bb8\u88ab\u5220\u9664\uff09\n\n    def __delattr__(self, name):\n        print(f&quot;\u2699\ufe0f \u62e6\u622a\u5230\u5c5e\u6027\u5220\u9664\u8bf7\u6c42\uff1a\u5c1d\u8bd5\u5220\u9664\u5c5e\u6027 [{name}]&quot;)\n\n        # 1. \u5b89\u5168\u9650\u5236\uff1a\u5982\u679c\u662f\u6838\u5fc3\u5c5e\u6027 battery\uff0c\u76f4\u63a5\u62d2\u7edd\u5e76\u62a5\u9519\n        if name == &quot;battery&quot;:\n            raise AttributeError(f&quot;\u274c \u62d2\u7edd\u64cd\u4f5c\uff1a[{name}] \u662f\u673a\u5668\u4eba\u7684\u6838\u5fc3\u7ec4\u4ef6\uff0c\u4e0d\u80fd\u88ab\u5220\u9664\uff01&quot;)\n\n        # 2. \u6b63\u5e38\u5220\u9664\uff1a\u5982\u679c\u662f\u5176\u4ed6\u666e\u901a\u5c5e\u6027\uff0c\u5141\u8bb8\u5220\u9664\n        # \u3010\u6ce8\u610f\u3011\u8fd9\u91cc\u5fc5\u987b\u8c03\u7528\u7236\u7c7b object \u7684 __delattr__ \u6765\u771f\u6b63\u4ece\u5185\u5b58\u4e2d\u79fb\u9664\u5c5e\u6027\n        print(f&quot; \u5141\u8bb8\u5220\u9664 [{name}]\uff0c\u6b63\u5728\u5c06\u5176\u4ece\u5185\u5b58\u4e2d\u79fb\u9664...&quot;)\n        super().__delattr__(name)\n\n# --- \u8fd0\u884c\u6d4b\u8bd5 ---\nrb = Robot(&quot;\u963f\u7ae5\u6728&quot;, 100)\n\nprint(&quot;--- 1. \u5c1d\u8bd5\u5220\u9664\u666e\u901a\u5c5e\u6027 name ---&quot;)\nprint(&quot;\u5220\u9664\u524d\u5c5e\u6027\u5b57\u5178\uff1a&quot;, rb.__dict__)\ndel rb.name  # \u89e6\u53d1\u62e6\u622a\nprint(&quot;\u5220\u9664\u540e\u5c5e\u6027\u5b57\u5178\uff1a&quot;, rb.__dict__)\n\nprint(&quot;\\n--- 2. \u5c1d\u8bd5\u5220\u9664\u6838\u5fc3\u5c5e\u6027 battery ---&quot;)\ntry:\n    del rb.battery  # \u89e6\u53d1\u62e6\u622a\uff0c\u5c06\u4f1a\u629b\u51fa\u5f02\u5e38\nexcept AttributeError as e:\n    print(e)<\/code><\/pre>\n<h5 class=\"wp-block-heading\">\u8fd0\u884c\u7ed3\u679c<\/h5>\n<pre class=\"wp-block-code\"><code>--- 1. \u5c1d\u8bd5\u5220\u9664\u666e\u901a\u5c5e\u6027 name ---\n\u5220\u9664\u524d\u5c5e\u6027\u5b57\u5178\uff1a {'name': '\u963f\u7ae5\u6728', 'battery': 100}\n\u2699\ufe0f \u62e6\u622a\u5230\u5c5e\u6027\u5220\u9664\u8bf7\u6c42\uff1a\u5c1d\u8bd5\u5220\u9664\u5c5e\u6027 [name]\n \u5141\u8bb8\u5220\u9664 [name]\uff0c\u6b63\u5728\u5c06\u5176\u4ece\u5185\u5b58\u4e2d\u79fb\u9664...\n\u5220\u9664\u540e\u5c5e\u6027\u5b57\u5178\uff1a {'battery': 100}\n\n--- 2. \u5c1d\u8bd5\u5220\u9664\u6838\u5fc3\u5c5e\u6027 battery ---\n\u2699\ufe0f \u62e6\u622a\u5230\u5c5e\u6027\u5220\u9664\u8bf7\u6c42\uff1a\u5c1d\u8bd5\u5220\u9664\u5c5e\u6027 [battery]\n\u274c \u62d2\u7edd\u64cd\u4f5c\uff1a[battery] \u662f\u673a\u5668\u4eba\u7684\u6838\u5fc3\u7ec4\u4ef6\uff0c\u4e0d\u80fd\u88ab\u5220\u9664\uff01<\/code><\/pre>\n<h5 class=\"wp-block-heading\">4. \u5bb9\u5668\u4e0e\u7d22\u5f15\u64cd\u4f5c<\/h5>\n<p class=\"wp-block-paragraph\">(1)<strong>len<\/strong>(self)\uff1a<br>\u5f53\u8c03\u7528 len(obj) \u65f6\u89e6\u53d1\uff0c\u8fd4\u56de\u5bf9\u8c61\u7684\u957f\u5ea6\u3002<br>(2)<strong>getitem<\/strong>(self, key)\uff1a<br>\u5f53\u901a\u8fc7 obj[key] \u83b7\u53d6\u5143\u7d20\u65f6\u89e6\u53d1\u3002<br>(3)<strong>setitem<\/strong>(self, key, value)\uff1a<br>\u5f53\u901a\u8fc7 obj[key] = value \u8d4b\u503c\u65f6\u89e6\u53d1\u3002<br>(4)<strong>delitem<\/strong>(self, key)\uff1a<br>\u5f53\u6267\u884c del obj[key] \u65f6\u89e6\u53d1\u3002<br>(5)<strong>contains<\/strong>(self, item)\uff1a<br>\u5f53\u6267\u884c item in obj \u65f6\u89e6\u53d1\uff0c\u8fd4\u56de\u5e03\u5c14\u503c\u3002<\/p>\n<p class=\"wp-block-paragraph\">\u793a\u4f8b:<\/p>\n<pre class=\"wp-block-code\"><code>class Cart:\n    def __init__(self):\n        # \u5728\u5185\u90e8\u7528\u4e00\u4e2a\u5b57\u5178\u6765\u5b9e\u9645\u5b58\u50a8\u5546\u54c1\u548c\u6570\u91cf\n        # \u683c\u5f0f\u5982\uff1a{&quot;\u82f9\u679c&quot;: 3, &quot;\u9999\u8549&quot;: 5}\n        self.items = {}\n\n    # 1. \u5bf9\u5e94 len(obj)\n    def __len__(self):\n        # \u8fd4\u56de\u8d2d\u7269\u8f66\u4e2d\u5546\u54c1\u7684\u603b\u79cd\u7c7b\u6570\n        return len(self.items)\n\n    # 2. \u5bf9\u5e94 obj[key]\n    def __getitem__(self, key):\n        # \u5982\u679c\u5546\u54c1\u5b58\u5728\uff0c\u8fd4\u56de\u6570\u91cf\uff1b\u5982\u679c\u4e0d\u5b58\u5728\uff0c\u9ed8\u8ba4\u8fd4\u56de 0\n        return self.items.get(key, 0)\n\n    # 3. \u5bf9\u5e94 obj[key] = value\n    def __setitem__(self, key, value):\n        # \u8bbe\u7f6e\u6216\u66f4\u65b0\u67d0\u79cd\u5546\u54c1\u7684\u6570\u91cf\n        if value &lt;= 0:\n            # \u5982\u679c\u6570\u91cf\u8bbe\u4e3a 0 \u6216\u8d1f\u6570\uff0c\u76f4\u63a5\u79fb\u9664\u8be5\u5546\u54c1\n            self.__delitem__(key)\n        else:\n            self.items[key] = value\n            print(f&quot;\ud83d\uded2 \u8d2d\u7269\u8f66\u66f4\u65b0\uff1a[{key}] \u7684\u6570\u91cf\u8c03\u6574\u4e3a {value} \u4e2a&quot;)\n\n    # 4. \u5bf9\u5e94 del obj[key]\n    def __delitem__(self, key):\n        # \u4ece\u8d2d\u7269\u8f66\u4e2d\u5f7b\u5e95\u5220\u9664\u67d0\u79cd\u5546\u54c1\n        if key in self.items:\n            del self.items[key]\n            print(f&quot;\ud83d\uddd1\ufe0f \u79fb\u51fa\u8d2d\u7269\u8f66\uff1a\u5546\u54c1 [{key}] \u5df2\u88ab\u5b8c\u5168\u6e05\u7a7a&quot;)\n        else:\n            print(f&quot;\u26a0\ufe0f \u63d0\u793a\uff1a\u8d2d\u7269\u8f66\u91cc\u672c\u6765\u5c31\u6ca1\u6709 [{key}]&quot;)\n\n    # 5. \u5bf9\u5e94 item in obj\n    def __contains__(self, item):\n        # \u5224\u65ad\u67d0\u79cd\u5546\u54c1\u662f\u5426\u5728\u8d2d\u7269\u8f66\u4e2d\n        return item in self.items\n\n# --- \u8fd0\u884c\u6d4b\u8bd5 ---\nmy_cart = Cart()\n\nprint(&quot;--- (1) \u9a8c\u8bc1 __setitem__ ([key] = value) ---&quot;)\nmy_cart[&quot;\u82f9\u679c&quot;] = 3\nmy_cart[&quot;\u9999\u8549&quot;] = 5\nmy_cart[&quot;\u897f\u74dc&quot;] = 1\n\nprint(&quot;\\n--- (2) \u9a8c\u8bc1 __len__ (len()) ---&quot;)\nprint(f&quot;\u8d2d\u7269\u8f66\u91cc\u73b0\u5728\u6709 {len(my_cart)} \u79cd\u5546\u54c1\u3002&quot;)  # \u89e6\u53d1 __len__\n\nprint(&quot;\\n--- (3) \u9a8c\u8bc1 __getitem__ ([key]) ---&quot;)\nprint(f&quot;\u82f9\u679c\u7684\u6570\u91cf: {my_cart['\u82f9\u679c']} \u4e2a&quot;)  # \u89e6\u53d1 __getitem__\nprint(f&quot;\u8349\u8393\u7684\u6570\u91cf: {my_cart['\u8349\u8393']} \u4e2a&quot;)  # \u89e6\u53d1 __getitem__ (\u4e0d\u5b58\u5728\u7684\u5546\u54c1)\n\nprint(&quot;\\n--- (4) \u9a8c\u8bc1 __contains__ (in) ---&quot;)\nprint(&quot;\u82f9\u679c \u5728\u8d2d\u7269\u8f66\u91cc\u5417\uff1f&quot;, &quot;\u82f9\u679c&quot; in my_cart)  # True\nprint(&quot;\u8349\u8393 \u5728\u8d2d\u7269\u8f66\u91cc\u5417\uff1f&quot;, &quot;\u8349\u8393&quot; in my_cart)  # False\n\nprint(&quot;\\n--- (5) \u9a8c\u8bc1 __delitem__ (del []) ---&quot;)\ndel my_cart[&quot;\u897f\u74dc&quot;]  # \u89e6\u53d1 __delitem__\nprint(f&quot;\u5220\u9664\u897f\u74dc\u540e\uff0c\u5546\u54c1\u79cd\u7c7b\u5269\u4f59: {len(my_cart)} \u79cd&quot;)\n\nprint(&quot;\\n--- \u8865\u5145\u6d4b\u8bd5\uff1a\u901a\u8fc7\u8d4b\u503c 0 \u95f4\u63a5\u89e6\u53d1\u5220\u9664 ---&quot;)\nmy_cart[&quot;\u82f9\u679c&quot;] = 0  # \u89e6\u53d1 __setitem__ \u5185\u90e8\u7684 __delitem__<\/code><\/pre>\n<h5 class=\"wp-block-heading\">\u8fd0\u884c\u7ed3\u679c<\/h5>\n<pre class=\"wp-block-code\"><code>--- (1) \u9a8c\u8bc1 __setitem__ ([key] = value) ---\n\ud83d\uded2 \u8d2d\u7269\u8f66\u66f4\u65b0\uff1a[\u82f9\u679c] \u7684\u6570\u91cf\u8c03\u6574\u4e3a 3 \u4e2a\n\ud83d\uded2 \u8d2d\u7269\u8f66\u66f4\u65b0\uff1a[\u9999\u8549] \u7684\u6570\u91cf\u8c03\u6574\u4e3a 5 \u4e2a\n\ud83d\uded2 \u8d2d\u7269\u8f66\u66f4\u65b0\uff1a[\u897f\u74dc] \u7684\u6570\u91cf\u8c03\u6574\u4e3a 1 \u4e2a\n\n--- (2) \u9a8c\u8bc1 __len__ (len()) ---\n\u8d2d\u7269\u8f66\u91cc\u73b0\u5728\u6709 3 \u79cd\u5546\u54c1\u3002\n\n--- (3) \u9a8c\u8bc1 __getitem__ ([key]) ---\n\u82f9\u679c\u7684\u6570\u91cf: 3 \u4e2a\n\u8349\u8393\u7684\u6570\u91cf: 0 \u4e2a\n\n--- (4) \u9a8c\u8bc1 __contains__ (in) ---\n\u82f9\u679c \u5728\u8d2d\u7269\u8f66\u91cc\u5417\uff1f True\n\u8349\u8393 \u5728\u8d2d\u7269\u8f66\u91cc\u5417\uff1f False\n\n--- (5) \u9a8c\u8bc1 __delitem__ (del []) ---\n\ud83d\uddd1\ufe0f \u79fb\u51fa\u8d2d\u7269\u8f66\uff1a\u5546\u54c1 [\u897f\u74dc] \u5df2\u88ab\u5b8c\u5168\u6e05\u7a7a\n\u5220\u9664\u897f\u74dc\u540e\uff0c\u5546\u54c1\u79cd\u7c7b\u5269\u4f59: 2 \u79cd\n\n--- \u8865\u5145\u6d4b\u8bd5\uff1a\u901a\u8fc7\u8d4b\u503c 0 \u95f4\u63a5\u89e6\u53d1\u5220\u9664 ---\n\ud83d\uddd1\ufe0f \u79fb\u51fa\u8d2d\u7269\u8f66\uff1a\u5546\u54c1 [\u82f9\u679c] \u5df2\u88ab\u5b8c\u5168\u6e05\u7a7a<\/code><\/pre>\n<h5 class=\"wp-block-heading\">5. \u53ef\u8c03\u7528\u5bf9\u8c61<\/h5>\n<p class=\"wp-block-paragraph\"><strong>call<\/strong>(self, *args, **kwargs)\uff1a<br>\u8ba9\u4e00\u4e2a\u5b9e\u4f8b\u5bf9\u8c61\u53ef\u4ee5\u50cf\u51fd\u6570\u4e00\u6837\u88ab\u62ec\u53f7\u8c03\u7528\u3002\u4f8b\u5982 obj()\u3002<br>\u793a\u4f8b:<\/p>\n<pre class=\"wp-block-code\"><code>class ConnectionCounter:\n    def __init__(self):\n        # \u5bf9\u8c61\u7684\u79c1\u6709\u50a8\u7269\u67dc\uff0c\u7528\u6765\u7ef4\u6301\u72b6\u6001\uff0c\u5916\u90e8\u65e0\u6cd5\u8f7b\u6613\u7be1\u6539\n        self.count = 0\n\n    def __call__(self, client_ip):\n        # \u6838\u5fc3\u9b54\u6cd5\uff1a\u6bcf\u6b21\u5bf9\u5b9e\u4f8b\u52a0\u62ec\u53f7\u8c03\u7528\uff0c\u8ba1\u6570\u52a0 1 \u5e76\u8bb0\u5f55\u65e5\u5fd7\n        self.count += 1\n        print(f&quot;[\u8ba1\u6570\u670d\u52a1] \u65b0\u8fde\u63a5\u81ea: {client_ip} | \u5386\u53f2\u603b\u8fde\u63a5\u6570: {self.count}&quot;)\n        return self.count\n\n# \u2500\u2500\u2500 \u5b9e\u6218\u6d4b\u8bd5 \u2500\u2500\u2500\n# 1. \u5b9e\u4f8b\u5316\u4e00\u4e2a\u8ba1\u6570\u5bf9\u8c61\ntrack_connection = ConnectionCounter()\n\n# 2. \u5947\u8ff9\u53d1\u751f\uff1a\u50cf\u8c03\u7528\u666e\u901a\u51fd\u6570\u4e00\u6837\u53bb\u8fde\u7eed\u8c03\u7528\u8fd9\u4e2a&ldquo;\u5b9e\u4f8b\u5bf9\u8c61&rdquo;\ntrack_connection(&quot;192.168.1.100&quot;) # \u8f93\u51fa: \u65b0\u8fde\u63a5\u81ea... | \u5386\u53f2\u603b\u8fde\u63a5\u6570: 1\ntrack_connection(&quot;10.0.0.5&quot;)      # \u8f93\u51fa: \u65b0\u8fde\u63a5\u81ea... | \u5386\u53f2\u603b\u8fde\u63a5\u6570: 2\ntrack_connection(&quot;127.0.0.1&quot;)     # \u8f93\u51fa: \u65b0\u8fde\u63a5\u81ea... | \u5386\u53f2\u603b\u8fde\u63a5\u6570: 3\n\n# 3. \u5b83\u4f9d\u7136\u662f\u4e2a\u5bf9\u8c61\uff0c\u4f60\u53ef\u4ee5\u968f\u65f6\u628a\u5b83\u7684\u5185\u90e8\u8d44\u4ea7\u635e\u51fa\u6765\u67e5\u770b\nprint(f&quot;\u6700\u7ec8\u5927\u4ed3\u5e93\u91cc\u5b58\u7684\u503c\u662f: {track_connection.count}&quot;) # \u8f93\u51fa: 3<\/code><\/pre>\n<h5 class=\"wp-block-heading\">\u8fd0\u884c\u7ed3\u679c<\/h5>\n<pre class=\"wp-block-code\"><code>[\u8ba1\u6570\u670d\u52a1] \u65b0\u8fde\u63a5\u81ea: 192.168.1.100 | \u5386\u53f2\u603b\u8fde\u63a5\u6570: 1\n[\u8ba1\u6570\u670d\u52a1] \u65b0\u8fde\u63a5\u81ea: 10.0.0.5 | \u5386\u53f2\u603b\u8fde\u63a5\u6570: 2\n[\u8ba1\u6570\u670d\u52a1] \u65b0\u8fde\u63a5\u81ea: 127.0.0.1 | \u5386\u53f2\u603b\u8fde\u63a5\u6570: 3\n\u6700\u7ec8\u5927\u4ed3\u5e93\u91cc\u5b58\u7684\u503c\u662f: 3<\/code><\/pre>\n<p class=\"wp-block-paragraph\">\u6bcf\u6b21\u5c06\u5bf9\u8c61\u50cf\u51fd\u6570\u4e00\u6837\u8c03\u7528\u65f6\u90fd\u4f1a\u8c03\u7528<strong>call<\/strong>\u65b9\u6cd5<\/p>\n<p class=\"wp-block-paragraph\"><strong><em>\u5ef6\u4f38:\u90a3\u4e48\u6709\u4e2a\u95ee\u9898\u6765\u4e86,\u6240\u6709\u7c7b\u90fd\u662fobject\u7684\u5b50\u7c7b,\u7c7b()\u521b\u5efa\u5bf9\u8c61\u65f6\u5e94\u8be5\u4f1a\u8c03\u7528<strong>call<\/strong>\u65b9\u6cd5,\u56e0\u4e3a\u7c7b\u4e5f\u662fobject\u7684\u5b9e\u4f8b\u561b,\u800c\u5b9e\u9645\u4e0aobject\u7c7b\u662f\u6ca1\u6709<strong>call<\/strong>\u65b9\u6cd5\u7684,\u90a3\u7c7b()\u5b9e\u4f8b\u5316\u5bf9\u8c61\u65f6\u5230\u5e95\u8c03\u8c01\u7684call\u65b9\u6cd5\u5462\uff1f<\/em><\/strong><br>\u5f15\u4f8b:<\/p>\n<pre class=\"wp-block-code\"><code>class Animal:\n\n    def __init__(self, name):\n        self.name = name\n\na1 = Animal(&quot;\u5c0f\u9ec4&quot;)<\/code><\/pre>\n<ul class=\"wp-block-list\">\n<li>\u9a8c\u8bc1object\u7c7b\u662f\u5426\u6709call\u65b9\u6cd5<\/li>\n<\/ul>\n<pre class=\"wp-block-code\"><code>print(&quot;__call__ \u5728 object \u7684\u5b57\u5178\u91cc\u5417\uff1f&quot;, &quot;__call__&quot; in object.__dict__)<\/code><\/pre>\n<h5 class=\"wp-block-heading\">\u8fd0\u884c\u7ed3\u679c<\/h5>\n<pre class=\"wp-block-code\"><code>__call__ \u5728 object \u7684\u5b57\u5178\u91cc\u5417\uff1f False<\/code><\/pre>\n<p class=\"wp-block-paragraph\">object\u786e\u5b9e\u6ca1\u6709<strong>call<\/strong>\u65b9\u6cd5<\/p>\n<ul class=\"wp-block-list\">\n<li>\u67e5\u770b Animal\u7c7b\u7684\u521b\u5efa\u7c7b,a1\u5b9e\u4f8b\u7684\u521b\u5efa\u7c7b<\/li>\n<\/ul>\n<pre class=\"wp-block-code\"><code>class Animal:\n\n    def __init__(self, name):\n        self.name = name\n\na1 = Animal(&quot;\u5c0f\u9ec4&quot;)\n\nprint(type(Animal))\n\nprint(type(a1))<\/code><\/pre>\n<h5 class=\"wp-block-heading\">\u8fd0\u884c\u7ed3\u679c<\/h5>\n<pre class=\"wp-block-code\"><code>&lt;class 'type'&gt;\n&lt;class '__main__.Animal'&gt;<\/code><\/pre>\n<p class=\"wp-block-paragraph\">\u7ed3\u679c\u8868\u660e\u867d\u7136Animal\u7ee7\u627f\u4e86object\u7c7b,\u4f46\u662f\u5b83\u662f\u7531type\u5143\u7c7b\u521b\u5efa\u7684,Animal\u7c7b\u662ftype\u7c7b\u7684\u5b9e\u4f8b,\u800ca1\u5bf9\u8c61\u662fAnimal\u7c7b\u7684\u5b9e\u4f8b\u3002\u6240\u4ee5a1 = Animal(&#8220;\u5c0f\u9ec4&#8221;)\u5b9e\u4f8b\u5316\u7c7b\u65f6\u5e94\u8be5\u8c03\u7528\u7684\u662ftype\u5143\u7c7b\u7684call\u65b9\u6cd5\u3002<br>\u9a8c\u8bc1type\u7c7b\u662f\u5426\u6709call\u65b9\u6cd5<\/p>\n<pre class=\"wp-block-code\"><code>print(&quot;__call__ \u5728 type \u7684\u5b57\u5178\u91cc\u5417\uff1f&quot;, &quot;__call__&quot; in type.__dict__)<\/code><\/pre>\n<h5 class=\"wp-block-heading\">\u8fd0\u884c\u7ed3\u679c<\/h5>\n<pre class=\"wp-block-code\"><code>__call__ \u5728 type \u7684\u5b57\u5178\u91cc\u5417\uff1f True<\/code><\/pre>\n<p class=\"wp-block-paragraph\">type\u5143\u7c7b\u679c\u7136\u662f\u6709<strong>call<\/strong>\u65b9\u6cd5,\u6240\u4ee5\uff1a\u5f53\u4e00\u4e2a&#8221;\u5b9e\u4f8b\u5bf9\u8c61()&#8221;\u88ab\u52a0\u5706\u62ec\u53f7\u8c03\u7528\u65f6\uff0c\u5e95\u5c42\u5b9e\u9645\u6267\u884c\u7684\uff0c\u5fc5\u7136\u662f\u521b\u5efa\u5b83\u7684\u90a3\u4e2a&#8221;\u7c7b\uff08\u4e5f\u5c31\u662f\u5b83\u7684\u4eb2\u751f\u5988\u5988\uff09&#8221;\u91cc\u9762\u5b9a\u4e49\u7684 <strong>call<\/strong> \u65b9\u6cd5\u3002<br>\u6240\u4ee5:<\/p>\n<ul class=\"wp-block-list\">\n<li>a1 = Animal(&#8220;\u5c0f\u9ec4&#8221;)\u8c03\u7528\u4e86type\u5143\u7c7b\u7684<strong>call<\/strong>\u65b9\u6cd5\u5b9e\u4f8b\u5316\u4e86\u7c7b<\/li>\n\n<li>a1() \u65f6\u8c03\u7528\u7684\u662f Animal\u7c7b\u7684<strong>call<\/strong>\u65b9\u6cd5,\u5982\u679c\u8fd9\u4e2acall\u65b9\u6cd5\u6ca1\u6709\u91cd\u5199,\u4f1a\u62a5\u9519\u3002\u5e76\u4e0d\u4f1a\u5f80\u4e0a\u8c03\u7528type\u7684<strong>call<\/strong>\u65b9\u6cd5\u3002<\/li>\n<\/ul>\n<p class=\"wp-block-paragraph\"><strong><em>\u5230\u8fd9\u91cc\u53c8\u6709\u4e00\u4e2a\u95ee\u9898\u4e86:\u6211\u4eec\u77e5\u9053\u521b\u5efa\u5bf9\u8c61\u4f1a\u5148\u8c03\u7528<strong>new<\/strong>\u65b9\u6cd5\u521b\u5efa\u5bf9\u8c61,\u7136\u540e\u518d<strong>init<\/strong>\u65b9\u6cd5\u521d\u59cb\u5316,\u5728\u4e0a\u8ff0\u4ee3\u7801\u4e2da1 = Animal(&#8220;\u5c0f\u9ec4&#8221;)\u4e5f\u662f\u5728\u521b\u5efa\u5bf9\u8c61,\u7531\u4e8eAnimal\u7c7b\u5176\u5b9e\u4e5f\u662ftype\u5143\u7c7b\u7684\u5b9e\u4f8b\u5bf9\u8c61,\u6240\u4ee5\u4f1a\u8c03\u7528type\u5143\u7c7b\u7684<strong>call<\/strong>\u65b9\u6cd5,\u90a3\u4e48<strong>call<\/strong>\u65b9\u6cd5\u4e0e<strong>new<\/strong>\u65b9\u6cd5\u53ca<strong>init<\/strong>\u65b9\u6cd5\u5b58\u5728\u600e\u6837\u7684\u8054\u7cfb\u5462?<\/em><\/strong><\/p>\n<p class=\"wp-block-paragraph\">\u5f53\u4f60\u5199\u4e0b a1 = Animal(&#8220;\u5c0f\u9ec4&#8221;) \u8fd9\u4e00\u884c\u4ee3\u7801\u65f6\uff0cPython \u89e3\u91ca\u5668\u5728\u5e95\u5c42\u5b9e\u9645\u4e0a\u6267\u884c\u4e86\u4e00\u573a\u201c\u603b\u6307\u6325\u8c03\u5ea6\u3001\u9020\u9aa8\u67b6\u3001\u586b\u8089\u8eab\u201d\u7684\u95ed\u73af\u4ea4\u54cd\u4e50\u3002\u6211\u4eec\u5df2\u7ecf\u77e5\u9053\uff0c\u8fd9\u884c\u4ee3\u7801\u7684\u672c\u8d28\u662f\u89e6\u53d1\u4e86\u5143\u7c7b\u5988\u5988\u7684 type.<strong>call<\/strong>(Animal, &#8220;\u5c0f\u9ec4&#8221;) \u3002\u800c <strong>new<\/strong> \u548c <strong>init<\/strong> \u5e76\u4e0d\u662f\u5b64\u7acb\u8fd0\u884c\u7684\uff0c\u5b83\u4eec\u662f type.<strong>call<\/strong> \u8fd9\u4e2a\u603b\u6307\u6325\u624b\u91cc\u6700\u6838\u5fc3\u7684\u4e24\u5f20\u738b\u724c\u3002\u4e0b\u9762\u4e3a\u60a8\u7528\u6700\u8be6\u7ec6\u7684\u4e09\u5927\u6b65\u9aa4\u3001\u7eaf\u6587\u672c\u5185\u5b58\u6d41\u5411\u56fe\uff0c\u5f7b\u5e95\u8fd8\u539f\u4e00\u4e2a Python \u5bf9\u8c61\u8bde\u751f\u7684\u771f\u5b9e\u7269\u7406\u5168\u6d41\u7a0b\uff0c\u5e76\u5398\u6e05\u5b83\u4e0e <strong>new<\/strong> \u7684\u751f\u6b7b\u5173\u7cfb\u3002<\/p>\n<pre class=\"wp-block-code\"><code> \u7a0b\u5e8f\u5458\u5199\u4e0b\uff1aa1 = Animal(&quot;\u5c0f\u9ec4&quot;)\n      \u2502\n      \u25bc (\u77ac\u95f4\u89e6\u53d1\u5143\u7c7b\u603b\u6307\u6325)\n \ud83d\ude80 \u3010\u6b65\u9aa4 1\u3011\uff1a\u5143\u7c7b\u603b\u6307\u6325\u542f\u52a8 \u2500\u2500 \u6267\u884c `type.__call__(Animal, &quot;\u5c0f\u9ec4&quot;)`\n      \u2502\n      \u251c\u2500\u25ba 1-1. \u603b\u6307\u6325\u5728\u5185\u6838\u4e2d\u4e0b\u8fbe\u7b2c\u4e00\u9053\u6b7b\u547d\u4ee4\uff1a&ldquo;\u53bb\u8c03\u7528 Animal.__new__(Animal, &quot;\u5c0f\u9ec4&quot;) \uff01&rdquo;\n      \u2502\n      \u251c\u2500\u25ba 1-2. \u3010\u6838\u5fc3\u4e3b\u89d2 __new__ \u767b\u573a\u3011\u2500\u2500\u3010\u7269\u7406\u7b51\u9020\u9aa8\u67b6\u9636\u6bb5\u3011\n      \u2502        \u251c\u2500\u2500 `__new__` \u662f\u4e00\u4e2a\u771f\u6b63\u7684\u3010\u6784\u9020\u5668\uff08Constructor\uff09\u3011\u3002\n      \u2502        \u251c\u2500\u2500 \u5b83\u987a\u7740\u7f51\u7ebf\u76f4\u63a5\u53bb\u627e\u64cd\u4f5c\u7cfb\u7edf\u7684 C \u8bed\u8a00\u5185\u6838\uff08\u8c03\u7528 malloc\uff09\u3002\n      \u2502        \u251c\u2500\u2500 \u7533\u8bf7\u4e00\u5757\u5e72\u51c0\u7684\u3001\u5927\u5c0f\u4e3a `tp_basicsize` \u7684\u5904\u5973\u5806\u5185\u5b58\u7a7a\u95f4\u3002\n      \u2502        \u251c\u2500\u2500 \u3010\u76d6\u4e0a\u7cfb\u7edf\u5370\u7ae0\u3011\uff1a\u5728\u8fd9\u5757\u5185\u5b58\u7684\u5934\u90e8\uff0c\u6084\u6084\u5199\u5165\uff1a\n      \u2502        \u2502    \u2460 \u5f15\u7528\u8ba1\u6570 `ob_refcnt = 1`  .\n      \u2502        \u2502    \u2461 \u7c7b\u578b\u6307\u9488 `ob_type = 0x5000`\uff08\u6b7b\u6b7b\u6307\u5411 Animal \u7c7b\u5bf9\u8c61\uff09\n      \u2502        \u2514\u2500\u2500 \u6700\u7ec8\uff0c`__new__` \u5e26\u7740\u8fd9\u5757\u521a\u51fa\u5382\u3001\u91cc\u9762\u7a7a\u65e0\u4e00\u7269\u7684\u3010\u5185\u5b58\u9aa8\u67b6\uff08\u5b9e\u4f8b\uff09\u3011\u8fd4\u56de\u7ed9\u603b\u6307\u6325\u3002\n      \u2502\n      \u25bc\n \ud83d\ude80 \u3010\u6b65\u9aa4 2\u3011\uff1a\u603b\u6307\u6325\u505a\u5b89\u5168\u68c0\u67e5 \u2500\u2500 \u6267\u884c `if isinstance(instance, cls):`\n      \u2502\n      \u251c\u2500\u25ba \u5982\u679c `__new__` \u521a\u624d\u7531\u4e8e\u67d0\u79cd\u539f\u56e0\uff08\u6bd4\u5982\u4f60\u6545\u610f\u62e6\u622a\uff09\u6ca1\u6709\u8fd4\u56de `Animal` \u7684\u9aa8\u67b6\uff0c\n      \u2502   \u603b\u6307\u6325\u5c31\u4f1a\u76f4\u63a5\u6536\u5de5\uff0c\u540e\u7eed\u7684 `__init__` \u3010\u7edd\u5bf9\u4e0d\u4f1a\u3011\u6267\u884c\uff01\n      \u2502\n      \u251c\u2500\u25ba \u5982\u679c\u68c0\u67e5\u901a\u8fc7\uff08\u62ff\u5230\u4e86\u5408\u6cd5\u7684\u9aa8\u67b6\uff09\uff0c\u603b\u6307\u6325\u4e0b\u8fbe\u7b2c\u4e8c\u9053\u6b7b\u547d\u4ee4\uff1a\n      \u2502   &ldquo;\u62ff\u7740\u8fd9\u5757\u9aa8\u67b6\uff0c\u53bb\u8c03\u7528 Animal.__init__(instance, &quot;\u5c0f\u9ec4&quot;) \uff01&rdquo;\n      \u2502\n      \u25bc\n \ud83d\ude80 \u3010\u6b65\u9aa4 3\u3011\uff1a\u8089\u8eab\u586b\u5145\u9636\u6bb5 \u2500\u2500 \u6267\u884c `__init__`\n      \u2502\n      \u251c\u2500\u2500 \u3010\u6838\u5fc3\u4e3b\u89d2 __init__ \u767b\u573a\u3011\u2500\u2500 \u5b83\u5e76\u4e0d\u662f\u6784\u9020\u5668\uff0c\u5b83\u53ea\u662f\u4e2a\u3010\u521d\u59cb\u5316\u5668\uff08Initializer\uff09\u3011\uff01\n      \u251c\u2500\u2500 \u5b83\u63a5\u8fc7\u4e86\u521a\u624d\u751f\u4ea7\u51fa\u6765\u7684\u7a7a\u9aa8\u67b6\uff0c\u628a\u5b83\u5f53\u6210\u7b2c\u4e00\u4e2a\u53c2\u6570 **`self`**\u3002\n      \u2514\u2500\u2500 \u5f00\u59cb\u6267\u884c\u4f60\u5728\u7c7b\u91cc\u5199\u7684\u8d4b\u503c\u4ee3\u7801\uff1a`self.name = &quot;\u5c0f\u9ec4&quot;`\uff0c\u5f80\u8fd9\u4e2a\u9aa8\u67b6\u7684 `__dict__` \u5c40\u90e8\u50a8\u7269\u67dc\u91cc\u586b\u8089\u3002\n\n      \u2502\n      \u25bc (\u603b\u6307\u6325\u6536\u5de5)\n \ud83d\ude80 \u3010\u5b8c\u7f8e\u4ea4\u5de5\u3011\uff1a`type.__call__` \u628a\u8fd9\u4e2a\u957f\u6ee1\u8089\u3001\u6ce8\u5165\u4e86\u7075\u9b42\u7684\u5b8c\u7f8e\u5b9e\u4f8b\u8fd4\u56de\u7ed9\u7a0b\u5e8f\u5458\u3002\n     \u6700\u7ec8\uff0c\u6808\u533a\u91cc\u7684\u53d8\u91cf\u540d\u4fbf\u5229\u8d34 `a1`\uff0c\u6b7b\u6b7b\u8d34\u5728\u4e86\u8fd9\u5757\u5185\u5b58\u9996\u5730\u5740\u4e0a\u3002<\/code><\/pre>\n<h5 class=\"wp-block-heading\">6. \u5bf9\u8c61\u5b57\u7b26\u4e32\u8868\u793a<\/h5>\n<p class=\"wp-block-paragraph\">(1)<strong>str<\/strong>(self)\uff1a<br>\u5b9a\u4e49\u7528\u6237\u770b\u7684\u5185\u5bb9\u3002\u5f53\u6267\u884c print(obj) \u6216 str(obj) \u65f6\u89e6\u53d1\uff0c\u8fd4\u56de\u5bf9\u4eba\u7c7b\u53cb\u597d\u7684\u5b57\u7b26\u4e32\u3002<br>\u662f\u7ed9\u4eba\u7c7b\uff08\u666e\u901a\u7528\u6237\uff09\u770b\u7684\u3002\u8ffd\u6c42\u8212\u9002\u3001\u597d\u770b\uff0c\u628a\u5bf9\u8c61\u4f2a\u88c5\u5f97\u5e72\u51c0\u6f02\u4eae\uff08\u6ce8\u91cd\u53ef\u8bfb\u6027 Readability\uff09\u3002<br>(2)<strong>repr<\/strong>(self)\uff1a<br>\u5b9a\u4e49\u5f00\u53d1\u8005\u770b\u7684\u5185\u5bb9\u3002\u5f53\u5728\u7ec8\u7aef\u76f4\u63a5\u56de\u8f66\u6216\u6267\u884c repr(obj) \u65f6\u89e6\u53d1\uff0c\u8fd4\u56de\u8be5\u5bf9\u8c61\u7684\u5b98\u65b9\u51c6\u786e\u8868\u8fbe\u5f0f\u3002<br>\u662f\u7ed9\u673a\u5668\uff08\u5f00\u53d1\u8005\/\u8c03\u8bd5\u5668\uff09\u770b\u7684\u3002\u8ffd\u6c42\u786c\u6838\u3001\u771f\u5b9e\uff0c\u628a\u5bf9\u8c61\u7684\u7269\u7406\u771f\u8eab\u6beb\u65e0\u4fdd\u7559\u5730\u5410\u51fa\u6765\uff08\u6ce8\u91cd\u65e0\u6b67\u4e49\u6027 Unambiguity\uff09<\/p>\n<h5 class=\"wp-block-heading\"><em>str_<\/em>\u4e0e<strong>repr<\/strong>\u6838\u5fc3\u533a\u522b\u4e0e\u7269\u7406\u89e6\u53d1\u65f6\u673a<\/h5>\n<figure class=\"wp-block-table\"><table class=\"has-fixed-layout\"><thead><tr><th>\u89e6\u53d1\u573a\u666f<\/th>\n<th>\u8868\u5c42\u4ee3\u7801\u793a\u4f8b<\/th>\n<th>\u5e95\u5c42\u7269\u7406\u7ffb\u627e\u5f15\u64ce\u7684\u8def\u5f84<\/th><\/tr><\/thead>\n<tbody><tr><td>\u6253\u5370\u7ed9\u4eba\u770b<\/td>\n<td>print(obj)str(obj)<\/td>\n<td>\u5148\u627e\u7c7b\u5b57\u5178\u91cc\u7684 <strong>str<\/strong>\uff0c\u5982\u679c\u6ca1\u5199\uff0c\u4f1a\u76f4\u63a5\u53bb\u8c03 <strong>repr<\/strong> \u9876\u5305\uff08\u4fdd\u5e95\u673a\u5236\uff09<\/td><\/tr>\n<tr><td>\u8c03\u8bd5\u7ed9\u5f00\u53d1\u8005\u770b<\/td>\n<td>\u770b\u5728\u7ec8\u7aef\u76f4\u63a5\u6572 obj \u56de\u8f66repr(obj)logger.debug(obj)<\/td>\n<td>\u76f4\u63a5\u4e14\u5f3a\u5236\u53bb\u7ffb\u627e\u7c7b\u5b57\u5178\u91cc\u7684 <strong>repr<\/strong><\/td><\/tr>\n<tr><td>\u5bb9\u5668\uff08\u5217\u8868\/\u5b57\u5178\uff09\u4e2d<\/td>\n<td>print([obj1, obj2])<\/td>\n<td>\u65e0\u8bba\u4f60\u662f\u7528 print \u8fd8\u662f\u522b\u7684\uff0c\u5bb9\u5668\u5185\u90e8\u5bf9\u5143\u7d20\u7684\u5e8f\u5217\u5316\u767e\u5206\u4e4b\u767e\u5f3a\u5236\u8c03\u7528 <strong>repr<\/strong><\/td><\/tr><\/tbody><\/table><\/figure>\n<p class=\"wp-block-paragraph\">\u793a\u4f8b:<\/p>\n<pre class=\"wp-block-code\"><code>class ClientConnection:\n    def __init__(self, ip, port, username):\n        self.ip = ip\n        self.port = port\n        self.username = username\n\n    # 1. \u91cd\u5199 __str__\uff1a\u7ed9\u666e\u901a\u7528\u6237\u6216\u524d\u7aef\u65e5\u5fd7\u770b\u7684&ldquo;\u6f02\u4eae\u5916\u8863&rdquo;\n    def __str__(self):\n        # \u8ffd\u6c42\u5e72\u51c0\u3001\u597d\u8bfb\n        return f&quot;\u7528\u6237[{self.username}] \u5df2\u7ecf\u6210\u529f\u8fde\u63a5&quot;\n\n    # 2. \u91cd\u5199 __repr__\uff1a\u7ed9\u5f00\u53d1\u8005\u8c03\u8bd5\u3001\u5d29\u6e83\u6392\u67e5\uff08Bug\u8ffd\u8e2a\uff09\u770b\u7684&ldquo;\u7269\u7406\u771f\u8eab&rdquo;\n    def __repr__(self):\n        # \u884c\u4e1a\u6807\u51c6\u89c4\u8303\uff1a__repr__ \u8fd4\u56de\u7684\u5b57\u7b26\u4e32\uff0c\u6700\u597d\u80fd\u8ba9\u4eba\u4e00\u773c\u770b\u51fa\u5b83\u7684\u7c7b\u540d\u548c\u7269\u7406\u5185\u90e8\u53c2\u6570 [^9^]\n        return f&quot;ClientConnection(ip='{self.ip}', port={self.port}, username='{self.username}')&quot;\n\n# \u2500\u2500\u2500 \u7269\u7406\u6d4b\u8bd5\u9a8c\u8bc1 \u2500\u2500\u2500\nconn1 = ClientConnection(&quot;192.168.1.105&quot;, 8888, &quot;Peter\u534a\u4ed9&quot;)\nconn2 = ClientConnection(&quot;10.0.0.12&quot;, 9999, &quot;\u9ed1\u5ba2\u5c0f\u5f3a&quot;)\n\n# === \u3010\u6d4b\u8bd5 1\uff1a\u666e\u901a\u6253\u5370 \u2794 \u89e6\u53d1 __str__\u3011 ===\nprint(&quot;--- \u6d4b\u8bd5 1\uff1a\u4eba\u7c7b\u89c6\u89d2 (print) ---&quot;)\nprint(conn1)  # \u8f93\u51fa: \u7528\u6237[Peter\u534a\u4ed9] \u5df2\u7ecf\u6210\u529f\u8fde\u63a5\nprint(str(conn1)) # \u663e\u5f0f\u8c03\u7528\uff0c\u8f93\u51fa\u76f8\u540c\n\n# === \u3010\u6d4b\u8bd5 2\uff1a\u5f00\u53d1\u8005\u8c03\u8bd5\u89c6\u89d2 \u2794 \u5f3a\u5236\u89e6\u53d1 __repr__\u3011 ===\nprint(&quot;\\n--- \u6d4b\u8bd5 2\uff1a\u673a\u5668\/\u5f00\u53d1\u8005\u89c6\u89d2 (repr) ---&quot;)\nprint(repr(conn1)) \n# \u8f93\u51fa: ClientConnection(ip='192.168.1.105', port=8888, username='Peter\u534a\u4ed9')\n\n# === \u3010\u6d4b\u8bd5 3\uff1a\u5217\u8868\u5bb9\u5668 \u2794 \u9707\u64bc\u53cd\u8f6c\uff01\u5f3a\u5236\u89e6\u53d1 __repr__\u3011 ===\nprint(&quot;\\n--- \u6d4b\u8bd5 3\uff1a\u628a\u5bf9\u8c61\u585e\u8fdb\u5217\u8868\u91cc\u6279\u91cf\u6253\u5370 ---&quot;)\nconnection_pool = [conn1, conn2]\n# \u5f88\u591a\u4eba\u4ee5\u4e3a\u5217\u8868 print \u51fa\u6765\u4e5f\u4f1a\u662f\u6f02\u4eae\u7684\u4e2d\u6587\uff0c\u5176\u5b9e\u4e0d\u7136\uff01\n# \u4e3a\u4e86\u9632\u6b62\u6b67\u4e49\uff0cPython \u5bb9\u5668\u5c42\u5728\u5e95\u5c42\u904d\u5386\u65f6\uff0c\u4f1a\u5f3a\u5236\u53bb\u8c03\u7528\u6bcf\u4e2a\u5143\u7d20\u7684 __repr__ [^9^]\uff01\nprint(connection_pool)<\/code><\/pre>\n<h5 class=\"wp-block-heading\">\u8fd0\u884c\u7ed3\u679c<\/h5>\n<pre class=\"wp-block-code\"><code>--- \u6d4b\u8bd5 1\uff1a\u4eba\u7c7b\u89c6\u89d2 (print) ---\n\u7528\u6237[Peter\u534a\u4ed9] \u5df2\u7ecf\u6210\u529f\u8fde\u63a5\n\u7528\u6237[Peter\u534a\u4ed9] \u5df2\u7ecf\u6210\u529f\u8fde\u63a5\n\n--- \u6d4b\u8bd5 2\uff1a\u673a\u5668\/\u5f00\u53d1\u8005\u89c6\u89d2 (repr) ---\nClientConnection(ip='192.168.1.105', port=8888, username='Peter\u534a\u4ed9')\n\n--- \u6d4b\u8bd5 3\uff1a\u628a\u5bf9\u8c61\u585e\u8fdb\u5217\u8868\u91cc\u6279\u91cf\u6253\u5370 ---\n[ClientConnection(ip='192.168.1.105', port=8888, username='Peter\u534a\u4ed9'), ClientConnection(ip='10.0.0.12', port=9999, username='\u9ed1\u5ba2\u5c0f\u5f3a')]<\/code><\/pre>\n<h3 class=\"wp-block-heading\">6.\u7ee7\u627f<\/h3>\n<h4 class=\"wp-block-heading\">\u5355\u7ee7\u627f<\/h4>\n<h5 class=\"wp-block-heading\">\u7c7b\u5c5e\u6027\u7684\u7ee7\u627f<\/h5>\n<p class=\"wp-block-paragraph\">\u5f15\u4f8b1:<\/p>\n<pre class=\"wp-block-code\"><code>class A:\n    num1 = 1\n\nclass B(A):\n    pass\n\nprint(A.num1)\nprint(B.num1)\nprint(A.num1 is B.num1)\n\nB.num1 = 100\nprint(A.num1)\nprint(B.num1)\n\nprint(A.num1 is B.num1)<\/code><\/pre>\n<h5 class=\"wp-block-heading\">\u8fd0\u884c\u7ed3\u679c<\/h5>\n<pre class=\"wp-block-code\"><code>1\n1\nTrue\n1\n100\nFalse<\/code><\/pre>\n<p class=\"wp-block-paragraph\">\u8fd9\u6bb5\u4ee3\u7801\u867d\u7136\u7b80\u5355,\u4f46\u662f\u8574\u542b\u5927\u4e7e\u5764,\u9996\u5148\u5b9a\u4e49\u4e86\u4e00\u4e2a\u7c7bA,\u7c7bA\u5b9a\u4e49\u4e86\u7c7b\u5c5e\u6027num1;\u7c7bB\u7ee7\u627f\u7c7bA\uff0c\u6ca1\u6709\u5b9a\u4e49\u5176\u4ed6\u5c5e\u6027\u3002<\/p>\n<p class=\"wp-block-paragraph\">(1)\u5f53\u6253\u5370print(A.num1)\u65f6<br>python\u6839\u636e\u65b9\u6cd5\u89e3\u6790\u987a\u5e8f\uff08Method Resolution Order, MRO\uff09<br>Python \u7684\u89e3\u91ca\u5668\u4f1a\u6309\u7167\u4ee5\u4e0b\u6b65\u9aa4\u8fdb\u884c\u67e5\u627e\uff1a<\/p>\n<ul class=\"wp-block-list\">\n<li>\u67e5\u627e\u7c7b A \u7684\u547d\u540d\u7a7a\u95f4\uff1a<br>Python \u9996\u5148\u68c0\u67e5 A.<strong>dict<\/strong>\uff08\u5373\u7c7b A \u81ea\u8eab\u7684\u5c5e\u6027\u5b57\u5178\uff09\u3002\u53d1\u73b0 &#8216;num1&#8217; \u5b58\u5728\u4e8eA.<strong>dict<\/strong> \u4e2d\uff0c\u503c\u4e3a 1\u3002<\/li>\n\n<li>\u8fd4\u56de\u7ed3\u679c\uff1a<br>Python \u76f4\u63a5\u8fd4\u56de A.<strong>dict<\/strong>[&#8216;num1&#8217;] \u7684\u503c\u3002<\/li>\n<\/ul>\n<p class=\"wp-block-paragraph\">\u800c\u8fd9\u4e2aA.<strong>dict<\/strong>\u5728python\u89e3\u6790\u5668\u8bfb\u5b8c\u7c7b\u5b9a\u4e49\u4ee3\u7801\u540e,\u4f1a\u5c06\u7c7b\u5c5e\u6027\u53ca\u65b9\u6cd5\u6307\u9488\u5199\u5165\u8fd9\u4e2a\u5b57\u5178\u3002<\/p>\n<p class=\"wp-block-paragraph\">(2)\u5f53\u6253\u5370print(B.num1)\u65f6<br>python\u6839\u636e\u65b9\u6cd5\u89e3\u6790\u987a\u5e8f\uff08Method Resolution Order, MRO\uff09<br>Python \u7684\u89e3\u91ca\u5668\u4f1a\u6309\u7167\u4ee5\u4e0b\u6b65\u9aa4\u8fdb\u884c\u67e5\u627e\uff1a<\/p>\n<ul class=\"wp-block-list\">\n<li>\u67e5\u627e\u7c7b B\u7684\u547d\u540d\u7a7a\u95f4\uff1a<br>Python \u9996\u5148\u68c0\u67e5 B.<strong>dict<\/strong>\uff08\u5373\u7c7b B\u81ea\u8eab\u7684\u5c5e\u6027\u5b57\u5178),\u6ca1\u6709\u627e\u5f97\u5230&#8217;num1&#8217;\u8fd9\u4e2akey\u3002\u56e0\u4e3a\u5728\u7c7bB\u91cc\u6ca1\u6709num1\u5b9a\u4e49,\u76f4\u63a5pass<\/li>\n\n<li>Python \u7ee7\u7eed\u5f80\u7c7bB\u7684\u7236\u7c7bA\u7ee7\u7eed\u67e5\u627e\u3002\u53d1\u73b0 &#8216;num1&#8217; \u5b58\u5728\u4e8eA.<strong>dict<\/strong> \u4e2d\uff0c\u503c\u4e3a 1\u3002<\/li>\n\n<li>Python \u76f4\u63a5\u8fd4\u56de A.<strong>dict<\/strong>[&#8216;num1&#8217;] \u7684\u503c\u3002<\/li>\n<\/ul>\n<p class=\"wp-block-paragraph\">\u6240\u4ee5\u6b64\u65f6A.num1\u4e0eB.num1 \u5c31\u662f\u540c\u4e00\u4e2a\u5bf9\u8c61,print(A.num1 is B.num1)\u81ea\u7136\u662fTrue<\/p>\n<blockquote class=\"wp-block-quote is-layout-flow wp-block-quote-is-layout-flow\">\n<p class=\"wp-block-paragraph\">a is b\uff1a\u6bd4\u5bf9\u7684\u662f\u6307\u9488\uff08\u53d8\u91cf\u91cc\u5199\u7740\u7684\u5185\u5b58\u95e8\u724c\u53f7\u662f\u5426\u5b8c\u5168\u4e00\u81f4\uff09\u3002\u5b83\u8fde\u6570\u636e\u7684\u5185\u5bb9\u770b\u90fd\u4e0d\u770b\u4e00\u773c [^9^]\u3002a == b\uff1a\u6bd4\u5bf9\u7684\u662f\u5185\u5bb9\uff08\u987a\u7740\u6307\u9488\u7ffb\u5f00\u4e24\u4e2a\u5bf9\u8c61\u7684\u50a8\u7269\u67dc\uff0c\u770b\u91cc\u9762\u7684\u6570\u636e\u662f\u5426\u76f8\u7b49\uff09<\/p>\n<\/blockquote>\n<p class=\"wp-block-paragraph\">(3)print(A.num1 is B.num1)<br>\u6839\u636e(1)(2),\u6b64\u65f6A.num1 \u4e0e B.num1\u5c31\u662f\u540c\u4e00\u4e2a\u5bf9\u8c61,\u6240\u4ee5\u6253\u5370True<\/p>\n<p class=\"wp-block-paragraph\">(4)B.num1 = 100<\/p>\n<ul class=\"wp-block-list\">\n<li>\u5199\u5165\u5b50\u7c7b\u5b57\u5178<br>Python \u5728\u5b50\u7c7b B \u7684\u547d\u540d\u7a7a\u95f4\uff08B.<strong>dict<\/strong>\uff09\u4e2d\u65b0\u5efa\u4e86\u4e00\u4e2a\u952e\u503c\u5bf9 &#8216;num1&#8217;: 100\u3002<\/li>\n\n<li>\u5207\u65ad\u7ee7\u627f\u94fe\u63a5<br>\u6b64\u540e\u8bbf\u95ee B.num1 \u65f6\uff0cPython \u4f1a\u76f4\u63a5\u5728 B\u7c7b\u4e2d\u627e\u5230\u8be5\u5c5e\u6027\uff0c\u4e0d\u518d\u5411\u4e0a\u67e5\u627e\u7236\u7c7b A\u3002<\/li>\n\n<li>\u7236\u7c7b\u4e0d\u53d7\u5f71\u54cd<br>A.<strong>dict<\/strong> \u4e2d\u7684 &#8216;num1&#8217;: 1 \u4fdd\u6301\u539f\u6837\u3002A.num1 \u4f9d\u7136\u6307\u5411\u6574\u6570 1\uff0c\u800c B.num1 \u6307\u5411\u6574\u6570 100\u3002<\/li>\n<\/ul>\n<p class=\"wp-block-paragraph\">B.<strong>dict<\/strong>\u4e0eA.<strong>dict<\/strong>\u663e\u7136\u5728\u4e0d\u540c\u5730\u5740\u7a7a\u95f4,num1\u81ea\u7136\u4e0d\u662f\u540c\u4e00\u4e2a\u5bf9\u8c61<\/p>\n<p class=\"wp-block-paragraph\">(5)print(A.num1)<br>\u81ea\u7136\u6253\u5370A.<strong>dict<\/strong>\u7684num1:1<br>(6)print(B.num1)<br>\u81ea\u7136\u6253\u5370B.<strong>dict<\/strong>\u7684num1:100<br>(7)print(A.num1 is B.num1)<br>\u81ea\u7136\u6253\u5370False<\/p>\n<p class=\"wp-block-paragraph\">\u5f15\u4f8b2:<\/p>\n<pre class=\"wp-block-code\"><code>class A:\n    num1 = 1\n\nclass B(A):\n    num1 = 2\n\nprint('num1' in B.__dict__.keys())\n\nprint(A.num1)\nprint(B.num1)\nprint(A.num1 is B.num1)\n\nB.num1 = 100\nprint(A.num1)\nprint(B.num1)\n\nprint(A.num1 is B.num1)<\/code><\/pre>\n<h5 class=\"wp-block-heading\">\u6253\u5370\u7ed3\u679c<\/h5>\n<pre class=\"wp-block-code\"><code>True\n1\n2\nFalse\n1\n100\nFalse<\/code><\/pre>\n<p class=\"wp-block-paragraph\">\u7531\u4e8e\u7c7bB\u867d\u7136\u7ee7\u627fA,\u4f46\u662f\u4ee3\u7801\u91cc\u91cd\u65b0\u5b9a\u4e49\u4e86num1\u7c7b\u5c5e\u6027,python\u89e3\u6790\u5668\u5728\u8bfb\u53d6\u5b8c\u7c7bB\u4ee3\u7801\u540e\u4f1a\u5728B.<strong>dict<\/strong>\u5185\u6dfb\u52a0B.<strong>dict<\/strong>[&#8216;num1&#8217;]=2\u3002\u8fd9\u4e0eA\u89e3\u8026\u4e86,num1\u5b8c\u5168\u5c5e\u4e8e\u7c7bB,\u57fa\u4e8e\u5f15\u4f8b1\u7684\u89e3\u8bfb,\u5f15\u4f8b2\u7684\u6253\u5370\u7ed3\u679c\u5c31\u597d\u7406\u89e3\u4e86\u3002<\/p>\n<h5 class=\"wp-block-heading\">\u7c7b\u65b9\u6cd5\u7684\u7ee7\u627f<\/h5>\n<p class=\"wp-block-paragraph\">\u90a3\u4e48\u7c7b\u65b9\u6cd5,\u9759\u6001\u65b9\u6cd5\u4e5f\u662f\u7c7b\u4f3c\u5462?\u6211\u4eec\u6765\u770b\u5f15\u4f8b3:<\/p>\n<pre class=\"wp-block-code\"><code>class A:\n\n    @classmethod\n    def func1(cls):\n        print(&quot;classmethod\u65b9\u6cd5&quot;)\n\nclass B(A):\n    pass\n\nprint(A.__dict__)\nprint(B.__dict__)\n\nprint(A.func1)\nprint(B.func1)\n\nprint(A.func1 is B.func1)\n\nprint(A.func1.__func__ is B.func1.__func__)\nprint(A.func1.__self__ is B.func1.__self__)<\/code><\/pre>\n<h5 class=\"wp-block-heading\">\u8fd0\u884c\u7ed3\u679c<\/h5>\n<pre class=\"wp-block-code\"><code>{'__module__': '__main__', 'func1': &lt;classmethod(&lt;function A.func1 at 0x100ba0360&gt;)&gt;, '__dict__': &lt;attribute '__dict__' of 'A' objects&gt;, '__weakref__': &lt;attribute '__weakref__' of 'A' objects&gt;, '__doc__': None}\n{'__module__': '__main__', '__doc__': None}\n&lt;bound method A.func1 of &lt;class '__main__.A'&gt;&gt;\n&lt;bound method A.func1 of &lt;class '__main__.B'&gt;&gt;\nFalse\nTrue\nFalse<\/code><\/pre>\n<p class=\"wp-block-paragraph\">\u8fd0\u884c\u7ed3\u679c\u8868\u660e<\/p>\n<ul class=\"wp-block-list\">\n<li>B.<strong>dict<\/strong>\u6ca1\u6709func1,A.<strong>dict<\/strong>\u6709func1<\/li>\n\n<li>A.func1 \u662f&gt;<\/li>\n\n<li>B.func1 \u662f&gt; A.func1\u4e0eB.func1\u5176\u5b9e\u662f\u7ed1\u5b9a\u65b9\u6cd5\u5bf9\u8c61,\u5404\u81ea\u5305\u542b<strong>func<\/strong>,<strong>self<\/strong>,\u5176\u4e2d<strong>func<\/strong>\u624d\u662f\u76f8\u540c\u7684\u3002<\/li>\n<\/ul>\n<p class=\"wp-block-paragraph\"><strong><em>\u7ed1\u5b9a\u65b9\u6cd5\u5bf9\u8c61\u7684\u5185\u90e8\u7ed3\u6784<\/em><\/strong><br>\u5f53\u4f60\u8bbf\u95ee A.func1\uff08\u7c7b\u65b9\u6cd5\uff09\u65f6\uff0c\u751f\u6210\u7684\u4e34\u65f6\u5bf9\u8c61\u5305\u542b\u4e24\u4e2a\u6838\u5fc3\u5c5e\u6027\uff1a<\/p>\n<ul class=\"wp-block-list\">\n<li><strong>func<\/strong>\uff1a\u6307\u5411\u539f\u59cb\u7684\u51fd\u6570\u5bf9\u8c61\uff08\u5373\u5b58\u50a8\u5728 A.<strong>dict<\/strong> \u4e2d\u7684\u90a3\u4e2a function\uff09\u3002<\/li>\n\n<li><strong>self<\/strong>\uff1a\u6307\u5411\u88ab\u7ed1\u5b9a\u7684\u7c7b\u5bf9\u8c61 A\uff08\u5982\u679c\u662f\u5b9e\u4f8b\u65b9\u6cd5\uff0c\u5219\u6307\u5411\u5b9e\u4f8b\uff09\u3002<\/li>\n<\/ul>\n<p class=\"wp-block-paragraph\">\u6211\u5728A\u4e2d\u770b\u5230\u4e86\u53ea\u6709\u4e00\u4e2afunc1\u7684key,\u5176value\u4e3a)&gt;,\u8fd9\u4e2avalue\u662f<strong><em>\u63cf\u8ff0\u7b26\u5bf9\u8c61<\/em><\/strong><br>\u5f53\u6267\u884cA.func1\u6216\u8005B.func1\u65f6:<\/p>\n<ul class=\"wp-block-list\">\n<li>\u8bfb\u53d6\u9759\u6001 Value\uff1aPython \u4ece A.<strong>dict<\/strong> \u53d6\u51fa\u90a3\u4e2a\u4e0d\u53d8\u7684 classmethod \u5bf9\u8c61\u3002<\/li>\n\n<li>\u8c03\u7528 <strong>get<\/strong>\uff1aPython \u8c03\u7528\u8be5\u5bf9\u8c61\u7684 <strong>get<\/strong>(instance, owner) \u65b9\u6cd5\u3002<br>\u5982\u679c\u662f A.func1\uff0c\u4f20\u5165\u7684 owner \u662f A\u3002<br>\u5982\u679c\u662f B.func1\uff0c\u4f20\u5165\u7684 owner \u662f B\u3002<\/li>\n\n<li>\u751f\u6210\u52a8\u6001\u5bf9\u8c61\uff1a<strong>get<\/strong> \u65b9\u6cd5\u6839\u636e\u4f20\u5165\u7684 owner\uff0c\u73b0\u573a\u521b\u5efa\u4e00\u4e2a\u65b0\u7684\u7ed1\u5b9a\u65b9\u6cd5\u5bf9\u8c61\uff08Bound Method\uff09\u3002<br>\u8fd9\u4e2a\u65b0\u5bf9\u8c61\u91cc\u8bb0\u5f55\u4e86\uff1a\u201c\u6211\u662f\u5c5e\u4e8e\u7c7b B \u7684\uff0c\u8c03\u7528\u6211\u65f6\u8981\u628a B \u4f20\u8fdb\u53bb\u201d\u3002<\/li>\n<\/ul>\n<p class=\"wp-block-paragraph\"><strong><em>\u4e3a\u4f55print(A.func1.<strong>func<\/strong> is B.func1.<strong>func<\/strong>) \u8fd4\u56de\u7684\u662fTrue?<\/em><\/strong><br>A.func1.<strong>func<\/strong> \u548c B.func1.<strong>func<\/strong> \u83b7\u53d6\u7684\u90fd\u662f\u540c\u4e00\u4e2a\u5185\u5b58\u5730\u5740\u7684\u51fd\u6570\u5bf9\u8c61<\/p>\n<p class=\"wp-block-paragraph\">\u603b\u7ed3:<br>\u7c7b\u65b9\u6cd5\u5728\u7ee7\u627f\u4e2d\u5171\u4eab\u540c\u4e00\u4efd\u5e95\u5c42\u51fd\u6570\u4ee3\u7801\uff0c\u4f46\u6bcf\u6b21\u8bbf\u95ee\u65f6\u4f1a\u6839\u636e\u8c03\u7528\u8005\u52a8\u6001\u751f\u6210\u4e0d\u540c\u7684\u7ed1\u5b9a\u65b9\u6cd5\u5bf9\u8c61\u3002<\/p>\n<p class=\"wp-block-paragraph\">\u5f15\u4f8b4:<\/p>\n<pre class=\"wp-block-code\"><code>class A:\n\n    @classmethod\n    def func1(cls):\n        print(&quot;A\u7684classmethod\u65b9\u6cd5&quot;)\n\nclass B(A):\n    @classmethod\n    def func1(cls):\n        print(&quot;B\u7684classmethod\u65b9\u6cd5&quot;)\n\nprint(A.__dict__)\nprint(B.__dict__)\n\nprint(A.func1)\nprint(B.func1)\n\nprint(A.func1 is B.func1)\n\nprint(A.func1.__func__ is B.func1.__func__)\nprint(A.func1.__self__ is B.func1.__self__)<\/code><\/pre>\n<h5 class=\"wp-block-heading\">\u8fd0\u884c\u7ed3\u679c<\/h5>\n<pre class=\"wp-block-code\"><code>{'__module__': '__main__', 'func1': &lt;classmethod(&lt;function A.func1 at 0x103218360&gt;)&gt;, '__dict__': &lt;attribute '__dict__' of 'A' objects&gt;, '__weakref__': &lt;attribute '__weakref__' of 'A' objects&gt;, '__doc__': None}\n{'__module__': '__main__', 'func1': &lt;classmethod(&lt;function B.func1 at 0x1034013a0&gt;)&gt;, '__doc__': None}\n&lt;bound method A.func1 of &lt;class '__main__.A'&gt;&gt;\n&lt;bound method B.func1 of &lt;class '__main__.B'&gt;&gt;\nFalse\nFalse\nFalse<\/code><\/pre>\n<p class=\"wp-block-paragraph\">\u6839\u636e\u7ed3\u679c,\u5f53\u7c7b\u65b9\u6cd5\u91cd\u5199\u540e,\u7c7bB\u7684<strong>dict<\/strong>\u4e2d\u6709\u81ea\u5df1\u7684func1\u4e14\u4e0e\u7c7bA\u7684func1\u5185\u5b58\u5730\u5740\u4e0d\u4e00\u6837,\u81ea\u7136\u4e0d\u662f\u540c\u4e00\u4e2a\u65b9\u6cd5\u3002\u6240\u4ee5\u91cd\u5199\u5c31\u662f\u62e5\u6709\u4e86\u81ea\u5df1\u7684\u7c7b\u65b9\u6cd5\u3002<\/p>\n<h5 class=\"wp-block-heading\">\u9759\u6001\u65b9\u6cd5\u7684\u7ee7\u627f<\/h5>\n<p class=\"wp-block-paragraph\">\u5f15\u4f8b5:<\/p>\n<pre class=\"wp-block-code\"><code>class A:\n\n    @staticmethod\n    def func2():\n        print(&quot;A\u7684staticmethod\u65b9\u6cd5&quot;)\n\nclass B(A):\n    pass\n\nprint(A.__dict__)\nprint(B.__dict__)\n\nprint(A.func2)\nprint(B.func2)\n\nprint(A.func2 is B.func2)<\/code><\/pre>\n<h5 class=\"wp-block-heading\">\u8fd0\u884c\u7ed3\u679c<\/h5>\n<pre class=\"wp-block-code\"><code>{'__module__': '__main__', 'func2': &lt;staticmethod(&lt;function A.func2 at 0x101680360&gt;)&gt;, '__dict__': &lt;attribute '__dict__' of 'A' objects&gt;, '__weakref__': &lt;attribute '__weakref__' of 'A' objects&gt;, '__doc__': None}\n{'__module__': '__main__', '__doc__': None}\n&lt;function A.func2 at 0x101680360&gt;\n&lt;function A.func2 at 0x101680360&gt;\nTrue<\/code><\/pre>\n<p class=\"wp-block-paragraph\">\u6839\u636e\u8fd0\u884c\u7ed3\u679c,\u8fd9\u4e2a\u8ddf\u5f15\u4f8b3\u5f88\u76f8\u4f3c,\u4f46\u662f\u786e\u5b9e\u540c\u4e00\u4e2a\u51fd\u6570\u5bf9\u8c61,\u9759\u6001\u65b9\u6cd5\u6ca1\u6709<strong>func<\/strong>\u4e0e<strong>self<\/strong>,\u6240\u4ee5\u6709\u4e24\u4e2a\u95ee\u9898:<br><strong><em>\u4e3a\u4f55\u9759\u6001\u65b9\u6cd5\u5728\u6ca1\u6709\u91cd\u5199\u60c5\u51b5\u4e0b\u7ee7\u627f\u7684\u662f\u540c\u4e00\u4e2a\u65b9\u6cd5?<\/em><\/strong><br>\u56e0\u4e3a Python \u4e2d\u7684\u9759\u6001\u65b9\u6cd5\uff08@staticmethod\uff09\u672c\u8d28\u4e0a\u5c31\u662f\u4e00\u4e2a\u666e\u901a\u7684\u51fd\u6570\uff0c\u5728\u5e95\u5c42\u4e0d\u4f1a\u4e0e\u7279\u5b9a\u7684\u7c7b\u6216\u5b9e\u4f8b\u8fdb\u884c\u7ed1\u5b9a(Binding),\u5728 Python \u4e2d\uff0c\u4e0d\u540c\u7c7b\u578b\u7684\u9759\u6001\/\u52a8\u6001\u65b9\u6cd5\u5728\u88ab\u8c03\u7528\u65f6\uff0c\u5e95\u5c42\u7684\u5904\u7406\u65b9\u5f0f\u622a\u7136\u4e0d\u540c:<\/p>\n<ul class=\"wp-block-list\">\n<li>\u666e\u901a\u5b9e\u4f8b\u65b9\u6cd5\uff1a\u4f1a\u52a8\u6001\u7ed1\u5b9a\u5b9e\u4f8b\uff0c\u81ea\u52a8\u4f20\u5165 self\u3002<\/li>\n\n<li>\u7c7b\u65b9\u6cd5\uff08@classmethod\uff09\uff1a\u4f1a\u52a8\u6001\u7ed1\u5b9a\u7c7b\uff0c\u81ea\u52a8\u4f20\u5165 cls\u3002\u56e0\u4e3a\u7ed1\u5b9a\u5bf9\u8c61\u4e0d\u540c\uff0cA.func1 is B.func1 \u4f1a\u8fd4\u56de False\uff08\u5b83\u4eec\u662f\u52a8\u6001\u751f\u6210\u7684\u4e0d\u540c\u7ed1\u5b9a\u65b9\u6cd5\u5bf9\u8c61\uff09\u3002<\/li>\n\n<li>\u9759\u6001\u65b9\u6cd5\uff08@staticmethod\uff09\uff1a\u4e0d\u7ed1\u5b9a\u4efb\u4f55\u5bf9\u8c61\u3002\u65e0\u8bba\u901a\u8fc7\u7c7b A \u8fd8\u662f\u7c7b B \u8bbf\u95ee\uff0cPython \u5e95\u5c42\u63cf\u8ff0\u7b26\uff08Descriptor\uff09\u90fd\u53ea\u4f1a\u539f\u5c01\u4e0d\u52a8\u5730\u8fd4\u56de\u90a3\u4e2a\u539f\u59cb\u7684\u3001\u552f\u4e00\u7684\u51fd\u6570\u5bf9\u8c61\u3002<\/li>\n<\/ul>\n<p class=\"wp-block-paragraph\">\u63cf\u8ff0\u7b26\u673a\u5236\uff08Descriptor Protocol\uff09\u662f classmethod \u548c staticmethod \u6838\u5fc3\u5dee\u5f02\u7684\u5e55\u540e\u63a8\u624b\u5373)&gt;\u4e0e)&gt;\u770b\u7740\u5f88\u50cf,\u5e95\u5c42\u662f\u4e0d\u4e00\u6837\u7684\u3002<\/p>\n<p class=\"wp-block-paragraph\">\u7b80\u5355\u6765\u8bf4\uff0c\u63cf\u8ff0\u7b26\u662f\u4e00\u4e2a\u5b9a\u4e49\u4e86 <strong>get<\/strong>() \u65b9\u6cd5\u7684\u5bf9\u8c61\u3002\u5f53\u901a\u8fc7\u7c7b\u6216\u5b9e\u4f8b\u8bbf\u95ee\u5c5e\u6027\u65f6\uff0cPython \u4f1a\u81ea\u52a8\u8c03\u7528\u8fd9\u4e2a <strong>get<\/strong>() \u65b9\u6cd5\u3002\u4ee5\u4e0b\u662f classmethod \u548c staticmethod \u5728\u63cf\u8ff0\u7b26\u673a\u5236\u4e0a\u7684\u672c\u8d28\u533a\u522b\uff1a<\/p>\n<ul class=\"wp-block-list\">\n<li>\u9759\u6001\u65b9\u6cd5\u7684 <strong>get<\/strong> \u4e0d\u5173\u5fc3\u662f\u8c01\u8c03\u7528\u4e86\u5b83\u3002\u65e0\u8bba\u8c01\u6765\uff0c\u5b83\u90fd\u539f\u5c01\u4e0d\u52a8\u5730\u8fd4\u56de\u88ab\u5305\u88f9\u7684\u539f\u59cb\u51fd\u6570\u3002<\/li>\n\n<li>\u7c7b\u65b9\u6cd5\u7684 <strong>get<\/strong> \u975e\u5e38\u5173\u5fc3\u662f\u8c01\u8c03\u7528\u4e86\u5b83\u3002\u5b83\u4f1a\u5c06\u8c03\u7528\u5b83\u7684\u7c7b\uff08owner\uff09\u548c\u51fd\u6570\u6253\u5305\uff0c\u52a8\u6001\u521b\u5efa\u4e00\u4e2a\u65b0\u7684\u201c\u7ed1\u5b9a\u65b9\u6cd5\u201d\u5bf9\u8c61\u3002<\/li>\n<\/ul>\n<p class=\"wp-block-paragraph\"><strong><em>\u4e3a\u4f55\u9759\u6001\u65b9\u6cd5\u6ca1\u6709<strong>func<\/strong>\u4e0e<strong>self<\/strong>\u4e24\u4e2a\u5c5e\u6027?<\/em><\/strong><br>\u6001\u65b9\u6cd5\uff08@staticmethod\uff09\u5b9e\u9645\u4e0a\u5c31\u662f\u6302\u8f7d\u5728\u7c7b\u7684\u547d\u540d\u7a7a\u95f4\u4e0b\u7684\u666e\u901a\u51fd\u6570\u3002\u5b83\u5728\u903b\u8f91\u4e0a\u548c\u8fd9\u4e2a\u7c7b\u5b8c\u5168\u89e3\u8026\uff0c\u72ec\u7acb\u5b58\u5728\u3002\u6240\u4ee5\u6ca1\u6709<strong>self<\/strong>\u6bd4\u8f83\u597d\u7406\u89e3,\u4f46\u662f\u4e3a\u4f55\u4e5f\u6ca1\u6709<strong>func<\/strong>:<\/p>\n<ul class=\"wp-block-list\">\n<li>\u5f53\u6267\u884cB.func2\u540e\u5176\u5b9e\u62ff\u5230\u7684\u5c31\u662f\u4e00\u4e2a\u666e\u901a\u51fd\u6570,\u7236\u7c7bA\u4e2d\u7684staticmethod\u63cf\u8ff0\u7b26\u4e2d\u7684<strong>get<\/strong>()\u65b9\u6cd5\u8fd4\u56de\u7684\u5c31\u662f\u4e00\u4e2a\u666e\u901a\u51fd\u6570,\u666e\u901a\u51fd\u6570\u662f\u6ca1\u6709<strong>func<\/strong>\u5c5e\u6027\u7684\u3002<\/li>\n<\/ul>\n<p class=\"wp-block-paragraph\">\u5f15\u4f8b6:<\/p>\n<pre class=\"wp-block-code\"><code>class A:\n\n    @staticmethod\n    def func2():\n        print(&quot;A\u7684staticmethod\u65b9\u6cd5&quot;)\n\nclass B(A):\n    @staticmethod\n    def func2():\n        print(&quot;B\u7684staticmethod\u65b9\u6cd5&quot;)\n\nprint(A.__dict__)\nprint(B.__dict__)\n\nprint(A.func2)\nprint(B.func2)\n\nprint(A.func2 is B.func2)<\/code><\/pre>\n<h5 class=\"wp-block-heading\">\u8fd0\u884c\u7ed3\u679c<\/h5>\n<pre class=\"wp-block-code\"><code>{'__module__': '__main__', 'func2': &lt;staticmethod(&lt;function A.func2 at 0x104ddc360&gt;)&gt;, '__dict__': &lt;attribute '__dict__' of 'A' objects&gt;, '__weakref__': &lt;attribute '__weakref__' of 'A' objects&gt;, '__doc__': None}\n{'__module__': '__main__', 'func2': &lt;staticmethod(&lt;function B.func2 at 0x104ed13a0&gt;)&gt;, '__doc__': None}\n&lt;function A.func2 at 0x104ddc360&gt;\n&lt;function B.func2 at 0x104ed13a0&gt;\nFalse<\/code><\/pre>\n<p class=\"wp-block-paragraph\">\u6839\u636e\u4e0a\u9762\u7684\u5206\u6790,\u91cd\u5199\u9759\u6001\u65b9\u6cd5\u5c31\u597d\u7406\u89e3\u4e86,\u91cd\u5199\u9759\u6001\u65b9\u6cd5\u7ee7\u627f\u7c7b\u7684<strong>dict<\/strong>\u62e5\u6709\u81ea\u5df1\u7684staticmethod\u63cf\u8ff0\u7b26,\u81ea\u7136\u4e0d\u662f\u540c\u4e00\u4e2a\u51fd\u6570,\u5176\u4f59\u903b\u8f91\u4e0e\u4e0a\u9762\u4e00\u6837\u3002<\/p>\n<p class=\"wp-block-paragraph\">\u603b\u7ed3:<\/p>\n<ul class=\"wp-block-list\">\n<li>\u9759\u6001\u65b9\u6cd5\u7ee7\u627f: \u662f\u540c\u4e00\u4e2a\u51fd\u6570<\/li>\n\n<li>\u9759\u6001\u65b9\u6cd5\u5982\u679c\u91cd\u5199\u4e86: \u4e0d\u662f\u540c\u4e00\u4e2a\u51fd\u6570<\/li>\n<\/ul>\n<h5 class=\"wp-block-heading\">\u5b9e\u4f8b\u65b9\u6cd5\u7684\u7ee7\u627f<\/h5>\n<p class=\"wp-block-paragraph\">\u5f15\u4f8b7:<\/p>\n<pre class=\"wp-block-code\"><code>class A:\n    def func3(self):\n        print(&quot;A\u7684\u5b9e\u4f8b\u65b9\u6cd5&quot;)\n\nclass B(A):\n    pass\n\nprint(A.__dict__)\nprint(B.__dict__)\n\nprint(A.func3)\nprint(B.func3)\n\nprint(A.func3 is B.func3)\n\na1 = A()\nb1 = B()\n\nprint(a1.func3)\nprint(b1.func3)\nprint(a1.func3 is b1.func3)\n\nprint(a1.func3.__func__ is b1.func3.__func__)<\/code><\/pre>\n<h5 class=\"wp-block-heading\">\u8fd0\u884c\u7ed3\u679c<\/h5>\n<pre class=\"wp-block-code\"><code>{'__module__': '__main__', 'func3': &lt;function A.func3 at 0x1053a4360&gt;, '__dict__': &lt;attribute '__dict__' of 'A' objects&gt;, '__weakref__': &lt;attribute '__weakref__' of 'A' objects&gt;, '__doc__': None}\n{'__module__': '__main__', '__doc__': None}\n&lt;function A.func3 at 0x1053a4360&gt;\n&lt;function A.func3 at 0x1053a4360&gt;\nTrue\n&lt;bound method A.func3 of &lt;__main__.A object at 0x10547e870&gt;&gt;\n&lt;bound method A.func3 of &lt;__main__.B object at 0x10547e750&gt;&gt;\nFalse\nTrue<\/code><\/pre>\n<p class=\"wp-block-paragraph\">\u6839\u636e\u7ed3\u679c\u6211\u4eec\u5148\u603b\u7ed3\u73b0\u8c61:<\/p>\n<ul class=\"wp-block-list\">\n<li>func3\u5728\u7c7bA\u4e2d\u7684<strong>dict<\/strong>\u5b58\u5728,\u4e14\u662f,\u8fd9\u5c31\u662f\u4e00\u4e2a\u666e\u901a\u51fd\u6570<\/li>\n\n<li>\u5f53\u5b9e\u4f8b\u65b9\u6cd5\u901a\u8fc7\u7c7b\u8c03\u7528\u65f6\u662f\u540c\u4e00\u4e2a\u51fd\u6570<\/li>\n\n<li>\u5f53\u5b9e\u4f8b\u65b9\u6cd5\u901a\u8fc7\u5b9e\u4f8b\u8c03\u7528\u65f6\u4e0d\u662f\u540c\u4e00\u4e2a\u51fd\u6570<\/li>\n<\/ul>\n<p class=\"wp-block-paragraph\">\u4e3a\u4f55\u4f1a\u51fa\u73b0\u8fd9\u79cd\u73b0\u8c61?<br>\u6211\u4eec\u77e5\u9053\u51e0\u4e4e\u6240\u6709\u51fd\u6570\u6216\u8005\u65b9\u6cd5\u5176\u5b9e\u5e95\u5c42\u90fd\u6709\u4e00\u4e2a<strong>get<\/strong>\u65b9\u6cd5,\u4ee3\u7801\u9a8c\u8bc1:<\/p>\n<pre class=\"wp-block-code\"><code>def my_func():\n    pass\n\n# \u9a8c\u8bc1\u666e\u901a\u51fd\u6570\u662f\u5426\u542b\u6709 __get__ \u5c5e\u6027\nprint(hasattr(my_func, &quot;__get__&quot;))  # \u8f93\u51fa: True \u2705\n\n# \u6216\u8005\u76f4\u63a5\u5728\u5b83\u7684\u5c5e\u6027\u5217\u8868\u4e2d\u67e5\u627e\nprint(&quot;__get__&quot; in dir(my_func))    # \u8f93\u51fa: True \u2705<\/code><\/pre>\n<p class=\"wp-block-paragraph\">\u5f53\u6211\u4eec\u901a\u8fc7\u7c7b.\u65b9\u6cd5 \u6216\u8005\u5b9e\u4f8b.\u65b9\u6cd5(\u901a\u8fc7\u5c5e\u6027\u65b9\u5f0f)\u65f6\u4f1a\u89e6\u53d1\u8fd9\u4e2a<strong>get<\/strong>\u65b9\u6cd5,\u8fd9\u4e2a<strong>get<\/strong>\u65b9\u6cd5\u6709\u4e2ainstance\u53c2\u6570:<\/p>\n<ul class=\"wp-block-list\">\n<li>\u5982\u679c\u662f\u7c7b.\u65b9\u6cd5: instance\u90fd\u662fNone,\u8fd4\u56de\u51fd\u6570\u672c\u8eab,\u6240\u6709\u90fd\u4e00\u6837<\/li>\n\n<li>\u5982\u679c\u662f\u5b9e\u4f8b.\u65b9\u6cd5: instance\u90fd\u662f\u5bf9\u5e94\u8c03\u7528\u7684\u5b9e\u4f8b,<strong>get<\/strong>\u4f1a\u8fdb\u884c\u5b9e\u4f8b\u7ed1\u5b9a,\u8fd4\u56de\u65b9\u6cd5\u7ed1\u5b9a\u5bf9\u8c61,\u6240\u4ee5\u4e0d\u4e00\u6837\u4e86,\u4f46\u662f\u5e95\u5c42\u65b9\u6cd5\u662f\u4e00\u6837\u7684,\u6240\u4ee5print(a1.func3 is b1.func3)\u662fFalse(\u6bd4\u7684\u662f\u65b9\u6cd5\u7ed1\u5b9a\u5bf9\u8c61),print(a1.func3.<strong>func<\/strong> is b1.func3.<strong>func<\/strong>)(\u6bd4\u7684\u662f\u65b9\u6cd5\u7ed1\u5b9a\u5bf9\u8c61\u7ed1\u5b9a\u7684\u65b9\u6cd5)\u662fTrue<\/li>\n<\/ul>\n<p class=\"wp-block-paragraph\">\u603b\u7ed3:<br>\u5b9e\u4f8b\u65b9\u6cd5\u7684\u7ee7\u627f\u662f\u540c\u4e00\u4e2a\u65b9\u6cd5<\/p>\n<ul class=\"wp-block-list\">\n<li>\u7c7b.\u65b9\u6cd5\u540d: \u8fd4\u56de\u5c31\u662f\u4e00\u4e2a\u666e\u901a\u51fd\u6570<\/li>\n\n<li>\u5b9e\u4f8b.\u65b9\u6cd5\u540d: \u8fd4\u56de\u7684\u662f\u4e00\u4e2a\u65b9\u6cd5\u7ed1\u5b9a\u5bf9\u8c61,\u4f46\u662f\u5b9e\u4f8b.\u65b9\u6cd5\u540d.<strong>func<\/strong>\u662f\u540c\u4e00\u4e2a\u51fd\u6570<\/li>\n<\/ul>\n<p class=\"wp-block-paragraph\">\u6211\u4eec\u5ef6\u4f38\u4e00\u4e0b:\u7c7b\u65b9\u6cd5,\u9759\u6001\u65b9\u6cd5\u5728&#8221;\u7c7b.\u65b9\u6cd5\u540d&#8221;\u4e0e&#8221;\u5b9e\u4f8b.\u65b9\u6cd5\u540d&#8221;\u662f\u5426\u8ddf\u5b9e\u4f8b\u65b9\u6cd5\u60c5\u51b5\u4e00\u81f4?<br>\u5f15\u4f8b8:<\/p>\n<pre class=\"wp-block-code\"><code>class A:\n\n    @classmethod\n    def func1(cls):\n        print(&quot;A\u7684\u7c7b\u65b9\u6cd5&quot;)\n\n    @staticmethod\n    def func2():\n        print(&quot;A\u7684\u9759\u6001\u65b9\u6cd5&quot;)\n\nclass B(A):\n    pass\n\nprint(&quot;----------1----------&quot;)\nprint(A.__dict__)\nprint(B.__dict__)\n\nprint(&quot;----------2----------&quot;)\nprint(A.func1)\nprint(A.func2)\n\nprint(&quot;----------3----------&quot;)\nprint(B.func1)\nprint(B.func2)\n\nprint(&quot;----------4----------&quot;)\nprint(A.func1 is B.func1)\nprint(A.func2 is B.func2)\n\na1 = A()\nb1 = B()\n\nprint(&quot;----------5----------&quot;)\nprint(a1.func1)\nprint(a1.func2)\n\nprint(&quot;----------6----------&quot;)\nprint(b1.func1)\nprint(b1.func2)\n\nprint(&quot;----------7----------&quot;)\nprint(a1.func1 is b1.func1)\nprint(a1.func2 is b1.func2)\n\nprint(&quot;----------8----------&quot;)\nprint(a1.func1.__func__ is b1.func1.__func__)<\/code><\/pre>\n<h5 class=\"wp-block-heading\">\u8fd0\u884c\u7ed3\u679c<\/h5>\n<pre class=\"wp-block-code\"><code>----------1----------\n{'__module__': '__main__', 'func1': &lt;classmethod(&lt;function A.func1 at 0x103694360&gt;)&gt;, 'func2': &lt;staticmethod(&lt;function A.func2 at 0x1037893a0&gt;)&gt;, '__dict__': &lt;attribute '__dict__' of 'A' objects&gt;, '__weakref__': &lt;attribute '__weakref__' of 'A' objects&gt;, '__doc__': None}\n{'__module__': '__main__', '__doc__': None}\n----------2----------\n&lt;bound method A.func1 of &lt;class '__main__.A'&gt;&gt;\n&lt;function A.func2 at 0x1037893a0&gt;\n----------3----------\n&lt;bound method A.func1 of &lt;class '__main__.B'&gt;&gt;\n&lt;function A.func2 at 0x1037893a0&gt;\n----------4----------\nFalse\nTrue\n----------5----------\n&lt;bound method A.func1 of &lt;class '__main__.A'&gt;&gt;\n&lt;function A.func2 at 0x1037893a0&gt;\n----------6----------\n&lt;bound method A.func1 of &lt;class '__main__.B'&gt;&gt;\n&lt;function A.func2 at 0x1037893a0&gt;\n----------7----------\nFalse\nTrue\n----------8----------\nTrue<\/code><\/pre>\n<p class=\"wp-block-paragraph\">\u7ed3\u679c\u5206\u6790:<\/p>\n<ul class=\"wp-block-list\">\n<li>\u7c7b\u65b9\u6cd5:<\/li>\n\n<li>print(A.func1):<br>&gt;<\/li>\n\n<li>print(B.func1):<br>&gt;<\/li>\n\n<li>print(a1.func1):<br>&gt;<\/li>\n\n<li>print(b1.func1):<br>&gt;<\/li>\n\n<li>print(A.func1 is B.func1):<br>False<\/li>\n\n<li>print(a1.func1 is b1.func1):<br>False<\/li>\n\n<li>print(a1.func1.<strong>func<\/strong> is b1.func1.<strong>func<\/strong>):<br>True<br>\u7c7b\u65b9\u6cd5\u51fa\u73b0\u8ddf\u5b9e\u4f8b\u65b9\u6cd5\u4e0d\u4e00\u6837\u7684\u60c5\u51b5,\u7c7b\u65b9\u6cd5\u5728\u7ee7\u627f\u4e2d,\u4e0d\u7ba1\u662f&#8221;\u7c7b.\u65b9\u6cd5\u540d&#8221;\u8fd8\u662f&#8221;\u5b9e\u4f8b.\u65b9\u6cd5\u540d&#8221;,\u8fd4\u56de\u7684\u90fd\u662f\u65b9\u6cd5\u7ed1\u5b9a\u5bf9\u8c61,\u8be5\u5bf9\u8c61\u662f\u65b0\u5bf9\u8c61,\u5185\u5b58\u5730\u5740\u4e0d\u540c,\u4f46\u662f\u65b9\u6cd5\u7ed1\u5b9a\u5bf9\u8c61\u7ed1\u5b9a\u7684\u65b9\u6cd5\u662f\u540c\u4e00\u4e2a\u65b9\u6cd5<\/li>\n\n<li>\u9759\u6001\u65b9\u6cd5:<\/li>\n\n<li>print(A.func2):<br><\/li>\n\n<li>print(B.func2):<br><\/li>\n\n<li>print(a1.func2):<br><\/li>\n\n<li>print(b1.func2):<br>&lt;<\/li>\n\n<li>print(A.func2 is B.func2):<br>True<\/li>\n\n<li>print(a1.func2 is b1.func2):<br>True<br>\u9759\u6001\u65b9\u6cd5\u4e0d\u7ba1\u662f&#8221;\u7c7b.\u65b9\u6cd5\u540d&#8221;\u8fd8\u662f&#8221;\u5b9e\u4f8b.\u65b9\u6cd5\u540d&#8221;\u8fd4\u56de\u7684\u90fd\u662f\u540c\u4e00\u4e2a\u51fd\u6570(\u4e0d\u662f\u51fd\u6570\u5bf9\u8c61),\u90fd\u662f\u57280x1037893a0\u7684\u5185\u5b58\u5730\u5740,\u4e5f\u662f\u4e2a\u666e\u901a\u51fd\u6570,\u5728A.<strong>dict<\/strong>\u6211\u4eec\u627e\u5230\u4e86\u5b83\u7684\u5b58\u653e: &#8216;func2&#8217;: )&gt;,staticmethod\u63cf\u8ff0\u7b26\u7684<strong>get<\/strong>\u65b9\u6cd5\u59cb\u7ec8\u8fd4\u56de,\u6240\u4ee5\u8fd9\u4e2a<strong>get<\/strong>\u65b9\u6cd5\u662f\u91cd\u5199\u4e86\u3002<\/li>\n<\/ul>\n<p class=\"wp-block-paragraph\"><strong><em>\u5982\u4f55\u7406\u89e3\u5b9e\u4f8b\u65b9\u6cd5\u4e0e\u9759\u6001\u65b9\u6cd5\u53ca\u7c7b\u65b9\u6cd5\u5728\u7ee7\u627f\u4e2d\u7684\u5dee\u5f02?<\/em><\/strong><br>\u91cd\u70b9\u5728\u88c5\u9970\u542f\u5668\u7684\u5dee\u5f02,\u5b9e\u4f8b\u65b9\u6cd5\u6ca1\u6709\u88c5\u9970\u5668,\u7c7b\u65b9\u6cd5\u6709@classmethod,\u9759\u6001\u65b9\u6cd5\u6709@staticmethod\u3002\u5176\u5b9e\u88c5\u9970\u5668\u5728\u5e95\u5c42\u91cd\u5199\u4e86\u6240\u6709\u51fd\u6570\u90fd\u6709\u7684<strong>get<\/strong>\u65b9\u6cd5\u4ee5\u5b9e\u73b0\u4e0d\u540c\u529f\u80fd\u3002<\/p>\n<p class=\"wp-block-paragraph\">##### \u6700\u7ec8\u603b\u7ed3:<\/p>\n<ul class=\"wp-block-list\">\n<li>\u91cd\u5199<br>\u91cd\u5199\u5176\u5b9e\u662f\u5f00\u8f9f\u4e86\u65b0\u7684\u5185\u5b58\u7a7a\u95f4,\u7136\u540e\u5b58\u50a8\u5230\u5b50\u7c7b\u7684<strong>dict<\/strong>\u5b57\u5178\u4e2d,\u6240\u4ee5\u91cd\u5199\u5c5e\u4e8e\u672c\u7c7b,\u62e5\u6709\u72ec\u7acb\u7a7a\u95f4,\u8ddf\u7236\u4e0d\u662f\u540c\u4e00\u4e2a\u65b9\u6cd5\u6216\u8005\u5c5e\u6027\u3002<\/li>\n\n<li>\u7ee7\u627f<\/li>\n\n<li>\u7c7b\u5c5e\u6027<br>\u5148\u672c\u7c7b<strong>dict<\/strong>\u67e5\u627e,\u6ca1\u6709\u5c31\u5f80\u7236\u7c7b\u627e,\u76f4\u5230\u627e\u5230\u4e3a\u6b62,\u6240\u4ee5\u7c7b\u5c5e\u6027\u7ee7\u627f\u662f\u540c\u4e00\u4e2a<\/li>\n\n<li>\u7c7b\u65b9\u6cd5<br>\u7c7b\u65b9\u6cd5\u6709@classmethod\u88c5\u9970,\u91cd\u5199\u4e86<strong>get<\/strong>\u65b9\u6cd5,\u7c7b\u65b9\u6cd5\u5728\u7ee7\u627f\u4e2d,\u4e0d\u7ba1\u662f&#8221;\u7c7b.\u65b9\u6cd5\u540d&#8221;\u8fd8\u662f&#8221;\u5b9e\u4f8b.\u65b9\u6cd5\u540d&#8221;,\u8fd4\u56de\u7684\u90fd\u662f\u65b9\u6cd5\u7ed1\u5b9a\u5bf9\u8c61,\u8be5\u5bf9\u8c61\u662f\u65b0\u5bf9\u8c61,\u5185\u5b58\u5730\u5740\u4e0d\u540c\uff0c\u4f46\u662f\u65b9\u6cd5\u7ed1\u5b9a\u5bf9\u8c61\u7ed1\u5b9a\u7684\u65b9\u6cd5\u662f\u540c\u4e00\u4e2a\u65b9\u6cd5<\/li>\n\n<li>\u9759\u6001\u65b9\u6cd5<br>\u9759\u6001\u65b9\u6cd5\u6709@staticmethod\u88c5\u9970,\u91cd\u5199\u4e86<strong>get<\/strong>\u65b9\u6cd5,\u4e0d\u7ba1\u662f\u7c7b\u8fd8\u662f\u5b9e\u4f8b\u8c03\u7528,\u8fd4\u56de\u7684\u90fd\u662f\u540c\u4e00\u4e2a\u666e\u901a\u51fd\u6570<\/li>\n\n<li>\u5b9e\u4f8b\u65b9\u6cd5<br>\u5b9e\u4f8b\u65b9\u6cd5\u6ca1\u6709\u88c5\u9970\u5668\u88c5\u9970,\u5176\u5b9e\u5c31\u662f\u666e\u901a\u51fd\u6570,\u6ca1\u6709\u91cd\u5199<strong>get<\/strong>\u65b9\u6cd5,\u5f53\u7c7b\u8c03\u7528\u65f6,\u7531\u4e8einstance\u662fNone,\u6240\u4ee5\u6ca1\u6709\u8fdb\u884c\u7c7b\u7ed1\u5b9a,\u76f4\u63a5\u51fd\u6570\u672c\u8eab,\u6240\u4ee5\u662f\u540c\u4e00\u4e2a\u51fd\u6570;\u901a\u8fc7\u5b9e\u4f8b\u8c03\u7528\u65f6instance\u662f\u5bf9\u5e94\u5b9e\u4f8b,\u4f1a\u8fdb\u884c\u7ed1\u5b9a\u8fd4\u56de\u65b9\u6cd5\u7ed1\u5b9a\u5bf9\u8c61,\u4f46\u662f\u7ed1\u5b9a\u7684\u65b9\u6cd5\u662f\u540c\u4e00\u4e2a,\u6307\u5411\u540c\u4e00\u4e2a\u5185\u5b58\u5730\u5740\u3002\u6240\u4ee5\u5b9e\u4f8b\u65b9\u6cd5\u7ee7\u627f\u662f\u540c\u4e00\u4e2a\u65b9\u6cd5<br><strong><em>\u6240\u4ee5\u7ee7\u627f\u90fd\u662f\u540c\u4e00\u4e2a<\/em><\/strong><\/li>\n<\/ul>\n<h4 class=\"wp-block-heading\">\u5355\u7ee7\u627f\u4e2d\u7684\u591a\u7ea7\u7ee7\u627f<\/h4>\n<p class=\"wp-block-paragraph\">\u8fd9\u4e2a\u6307\u7684\u662f\u4ec0\u4e48\u5462\uff1f\u4e0a\u9762\u5355\u7ee7\u627f\u5206\u6790\u90fd\u662f\u53ea\u7ee7\u627f\u4e86\u4e00\u4e2a\u7236\u7c7b,\u4f46\u662f\u5f80\u5f80\u7236\u7c7b\u8fd8\u662f\u6709\u7236\u7c7b,\u5f62\u6210\u5355\u7ee7\u627f\u7684\u591a\u7ea7\u7ee7\u627f,\u751a\u81f3\u66f4\u591a\u7ea7\u7ee7\u627f\u3002<br>\u6211\u4eec\u5b8c\u5168\u53ef\u4ee5\u501f\u52a9\u9012\u5f52\u601d\u8def\u6765\u7406\u89e3\u5206\u6790,\u4e0a\u9762\u5355\u7ee7\u627f\u5206\u6790\u4e24\u7ea7\u7ee7\u627f,\u6211\u4eec\u53ef\u4ee5\u628a\u8fd9\u4e24\u7ea7\u6253\u5305\u4e3a\u4e00\u4e2a\u6574\u4f53\u6765\u5206\u6790,\u7136\u540e\u4f5c\u4e3a\u4e00\u4e2a\u6574\u4f53\u4e0e\u7237\u7237\u7c7b\u5f62\u6210\u4e86\u65b0\u7684\u4e24\u7ea7\u7ee7\u627f,\u8fc7\u7a0b\u5b8c\u5168\u4e00\u6837,\u4ee5\u6b64\u7c7b\u63a8\u5230\u591a\u7ea7\u7ee7\u627f,\u6240\u4ee5\u8fd9\u91cc\u4e0d\u518d\u8fdb\u884c\u5206\u6790\u3002<\/p>\n<h4 class=\"wp-block-heading\">\u591a\u7ee7\u627f<\/h4>\n<p class=\"wp-block-paragraph\">\u4e0a\u9762\u5206\u6790\u4e2d,\u6211\u4eec\u90fd\u662f\u7c7bB\u53ea\u7ee7\u627f\u7c7bA,\u4f46\u662f\u6211\u4eec\u4e5f\u53ef\u4ee5\u7ee7\u627f\u5176\u4ed6\u7684\u7c7bC,\u7c7bD,\u5982class B(A,C,D)\u3002\u8fd9\u5c31\u662f\u591a\u7ee7\u627f<br>\u793a\u4f8b:<\/p>\n<pre class=\"wp-block-code\"><code>class A:\n    def greet(self):\n        print(&quot;A \u7684\u65b9\u6cd5&quot;)\n\nclass B(A):\n    def greet(self):\n        print(&quot;B \u7684\u65b9\u6cd5&quot;)\n        super().greet()  # \u79fb\u4ea4\u7ed9 MRO \u94fe\u6761\u4e2d\u7684\u4e0b\u4e00\u4e2a\u7c7b\n\nclass C(A):\n    def greet(self):\n        print(&quot;C \u7684\u65b9\u6cd5&quot;)\n        super().greet()  # \u79fb\u4ea4\u7ed9 MRO \u94fe\u6761\u4e2d\u7684\u4e0b\u4e00\u4e2a\u7c7b\n\n# D \u540c\u65f6\u7ee7\u627f B \u548c C\uff0c\u5de6\u4fa7\u7684 B \u4f18\u5148\u7ea7\u66f4\u9ad8\nclass D(B, C):\n    def greet(self):\n        print(&quot;D \u7684\u65b9\u6cd5&quot;)\n        super().greet()\n\n# --- \u6d4b\u8bd5\u8fd0\u884c ---\nd = D()\nd.greet()\n\nprint(&quot;\\n--- \u7c7b D \u7684 MRO \u67e5\u627e\u987a\u5e8f ---&quot;)\nfor cls in D.__mro__:\n    print(cls)<\/code><\/pre>\n<h5 class=\"wp-block-heading\">\u591a\u7ee7\u627f\u7684MRO<\/h5>\n<p class=\"wp-block-paragraph\">\u6211\u4eec\u56de\u8fc7\u6765\u770b\u4e0a\u9762\u591a\u7ee7\u627f\u4e2d\u7684\u793a\u4f8b,\u5982\u679c\u4e0d\u8fd0\u884c,\u6211\u4eec\u4f1a\u6709\u4e00\u4e2a\u7591\u95ee,\u7c7bD\u7ee7\u627f\u4e86\u7c7bB\u53ca\u7c7bC,\u5b83\u4eec\u90fd\u6709greet\u65b9\u6cd5,\u5b9e\u4f8bd.greet()\u5230\u5e95\u662f\u8c03\u7528\u54ea\u4e00\u4e2a\u7c7b\u7684greet()\u65b9\u6cd5\uff1f\u8fd9\u5c31\u662f\u672c\u8282\u8981\u8bb2\u7684\u591a\u7ee7\u627f\u7684MRO(\u65b9\u6cd5\u89e3\u6790\u987a\u5e8f)<br>\u4e3b\u8981\u7ecf\u5386\u8fc7\u4e00\u4e0b\u641c\u7d22\u7b97\u6cd5\u3002\u4ee5\u4e0b\u662f\u8fd9\u4e9b\u7b97\u6cd5\u7684\u539f\u7406\u3001\u4f18\u7f3a\u70b9\u4ee5\u53ca\u6700\u65b0\u73b0\u72b6\u3002<\/p>\n<ul class=\"wp-block-list\">\n<li><strong><em>\u6df1\u5ea6\u4f18\u5148\u3001\u4ece\u5de6\u81f3\u53f3\u7b97\u6cd5\uff08DLR\uff09<\/em><\/strong><br>\u8fd9\u662f\u6700\u65e9\u671f\u3001\u6700\u76f4\u89c2\u7684\u641c\u7d22\u7b97\u6cd5\u3002\u65e9\u671f\u7684 Python 2.2 \u4e4b\u524d\u3001C++\u3001Perl \u7b49\u8bed\u8a00\u90fd\u4f7f\u7528\u8fc7\u5b83<\/li>\n\n<li>\u7b97\u6cd5\u539f\u7406\uff1a\u987a\u7740\u5de6\u8fb9\u7684\u7236\u7c7b\u4e00\u8def\u5f80\u6700\u6df1\u5904\u67e5\u627e\uff0c\u76f4\u5230\u6ca1\u6709\u7236\u7c7b\u4e86\uff0c\u518d\u8fd4\u56de\u6765\u627e\u53f3\u8fb9\u7684\u7236\u7c7b\u3002<\/li>\n\n<li>\u81f4\u547d\u7f3a\u9677\uff1a\u65e0\u6cd5\u89e3\u51b3&#8221;\u83f1\u5f62\u7ee7\u627f\uff08\u94bb\u77f3\u95ee\u9898\uff09&#8221;\u3002<br>(1)\u5047\u8bbe D \u7ee7\u627f\u81ea B \u548c C\uff0c\u800c B \u548c C \u90fd\u7ee7\u627f\u81ea\u57fa\u7840\u7c7b A\u3002<br>(2)DLR \u7684\u67e5\u627e\u987a\u5e8f\u662f\uff1aD \u2192 B \u2192 A \u2192 C\u3002<br>(3)\u95ee\u9898\uff1a\u5373\u4f7f\u53f3\u8fb9\u7684\u7236\u7c7b C \u91cd\u5199\u4e86 A \u7684\u65b9\u6cd5\uff0c\u7531\u4e8e\u4f18\u5148\u6df1\u5165\u5230\u4e86\u9876\u5c42\u7684 A\uff0c\u5bfc\u81f4 A \u7684\u65e7\u65b9\u6cd5\u4f1a\u610f\u5916\u906e\u853d C \u7684\u65b0\u65b9\u6cd5\u3002\u8fd9\u6837C\u7c7b\u7684\u91cd\u5199\u6ca1\u6709\u610f\u4e49\u4e86,\u56e0\u4e3a\u4f1a\u4f18\u5148\u4f7f\u7528A\u4e2d\u65b9\u6cd5,A\u4e2d\u5148\u627e\u5230<\/li>\n\n<li><strong><em>\u5f15\u5165\u5e7f\u5ea6\u4f18\u5148\u7684\u8fc7\u6e21\u7b97\u6cd5\uff08Python 2.2 \u7ecf\u5178\u65b0\u5f0f\u7c7b\uff09<\/em><\/strong><br>\u4e3a\u4e86\u89e3\u51b3 DLR \u6df1\u5ea6\u4f18\u5148\u5bfc\u81f4\u7684\u9876\u5c42\u7c7b\u63d0\u524d\u906e\u853d\u95ee\u9898\uff0cPython 2.2 \u5f15\u5165\u4e86\u65b0\u5f0f\u7c7b\uff0c\u5e76\u5bf9\u7b97\u6cd5\u8fdb\u884c\u4e86\u4fee\u6b63\u3002<\/li>\n\n<li>\u7b97\u6cd5\u539f\u7406\uff1a\u5982\u679c\u9047\u5230\u83f1\u5f62\u7ee7\u627f\uff0c\u516c\u5171\u7684\u7956\u5148\u7c7b\uff08\u5982 object\uff09\u4f1a\u88ab\u7559\u5230\u6700\u540e\u624d\u67e5\u627e\u3002<\/li>\n\n<li>\u81f4\u547d\u7f3a\u9677\uff1a\u8fdd\u53cd\u4e86\u5355\u8c03\u6027\uff08Monotonicity\uff09\u3002\u5355\u8c03\u6027\u662f\u6307\uff1a\u5982\u679c\u5728\u7c7b C \u4e2d\uff0c\u7236\u7c7b X \u6392\u5728 Y \u7684\u524d\u9762\uff0c\u90a3\u4e48\u5728 C \u7684\u4efb\u4f55\u5b50\u7c7b\u4e2d\uff0cX \u4e5f\u5fc5\u987b\u6392\u5728 Y \u7684\u524d\u9762\u3002\u7b2c\u4e8c\u4ee3\u7b97\u6cd5\u5728\u67d0\u4e9b\u590d\u6742\u7684\u4ea4\u53c9\u591a\u7ee7\u627f\u573a\u666f\u4e0b\uff0c\u4f1a\u5bfc\u81f4\u5b50\u7c7b\u7684\u67e5\u627e\u987a\u5e8f\u7a81\u7136\u53d1\u751f\u201c\u7236\u5b50\u5012\u7f6e\u201d\u6216\u201c\u5de6\u53f3\u53cd\u8f6c\u201d\uff0c\u4ece\u800c\u5f15\u53d1\u6781\u5176\u9690\u853d\u7684 Bug\u3002<\/li>\n\n<li><strong><em>C3 \u7ebf\u6027\u5316\u7b97\u6cd5\uff08C3 Linearization\uff09<\/em><\/strong><br>\u4e3a\u4e86\u5f7b\u5e95\u89e3\u51b3\u5355\u8c03\u6027\u95ee\u9898\uff0cPython 2.3 \u81f3\u4eca\uff08\u5305\u62ec\u6700\u65b0\u7684 Python 3\uff09\u3001\u56de\u54cd\/Solidity\uff08\u667a\u80fd\u5408\u7ea6\u8bed\u8a00\uff09\u3001Perl 6 \u7b49\u8bed\u8a00\uff0c\u5168\u9762\u91c7\u7528\u4e86\u7531\u79d1\u5b66\u5bb6\u63d0\u51fa\u7684 C3 \u7ebf\u6027\u5316\u7b97\u6cd5\u3002<\/li>\n\n<li>\u7b97\u6cd5\u539f\u7406\uff1a\u5b83\u901a\u8fc7\u6570\u5b66\u4e0a\u7684\u62d3\u6251\u6392\u5e8f\uff0c\u5c06\u590d\u6742\u7684\u7ee7\u627f\u56fe\u6241\u5e73\u5316\u5730\u62c9\u6210\u4e00\u6761\u7edd\u5bf9\u552f\u4e00\u7684\u76f4\u7ebf\u5217\u8868\u3002\u5b83\u4e25\u683c\u9075\u5b88 3 \u4e2a\u6838\u5fc3\u539f\u5219\uff1a<\/li>\n\n<li>\u5b50\u7c7b\u4f18\u5148\uff1a\u5b50\u7c7b\u4e00\u5b9a\u6392\u5728\u6240\u6709\u7236\u7c7b\u524d\u9762\u3002<\/li>\n\n<li>\u5c40\u90e8\u4f18\u5148\u7ea7\uff1a\u4e25\u683c\u9075\u5b88\u5199\u5728\u62ec\u53f7 (B, C) \u91cc\u7684\u4ece\u5de6\u5230\u53f3\u7684\u987a\u5e8f\u3002<\/li>\n\n<li>\u5355\u8c03\u6027\uff1a\u4fdd\u8bc1\u6240\u6709\u5b50\u7c7b\u548c\u7236\u7c7b\u4e4b\u95f4\u7684\u76f8\u5bf9\u987a\u5e8f\u5728\u6574\u4e2a\u7ee7\u627f\u6811\u4e2d\u662f\u4e00\u81f4\u7684\u3002<\/li>\n\n<li>Merge \u878d\u5408\u673a\u5236\uff1aC3 \u7b97\u6cd5\u7684\u6838\u5fc3\u662f merge() \u8fd0\u7b97\u3002\u6bcf\u6b21\u63d0\u53d6\u4e00\u4e2a\u5217\u8868\u4e2d\u4e0d\u5728\u5176\u4ed6\u5217\u8868\u201c\u5c3e\u90e8\u201d\u51fa\u73b0\u7684\u5934\u5143\u7d20\u3002\u5982\u679c\u53d1\u73b0\u62d3\u6251\u7ed3\u6784\u51b2\u7a81\uff0c\u5b83\u4f1a\u76f4\u63a5\u62a5\u9519\uff08TypeError\uff09\u62d2\u7edd\u8fd0\u884c\uff0c\u4ece\u800c\u5728\u7f16\u8bd1\u671f\u5c31\u628a\u6b67\u4e49\u627c\u6740\u5728\u6447\u7bee\u91cc\u3002<\/li>\n<\/ul>\n<p class=\"wp-block-paragraph\">\u4e0b\u9762\u6211\u4eec\u53ea\u8bb2C3 \u7ebf\u6027\u5316\u7b97\u6cd5\u60c5\u51b5<\/p>\n<h5 class=\"wp-block-heading\">\u7ecf\u5178\u83f1\u5f62\u7ee7\u627f\uff08Diamond Inheritance\uff09<\/h5>\n<p class=\"wp-block-paragraph\">\u8fd9\u662f\u6700\u6807\u51c6\u7684\u83f1\u5f62\u62d3\u6251\u7ed3\u6784\u3002\u5b50\u7c7b\u901a\u8fc7\u4e24\u6761\u4e0d\u540c\u7684\u8def\u5f84\u6700\u7ec8\u6c47\u805a\u5230\u540c\u4e00\u4e2a\u8001\u7956\u5148\u7c7b\u3002<\/p>\n<ul class=\"wp-block-list\">\n<li>\u62d3\u6251\u56fe<\/li>\n<\/ul>\n<pre class=\"wp-block-code\"><code>       [  object  ]\n            \u25b2\n            \u2502\n         [  A  ]\n         \u25b2     \u25b2\n        \/       \\\n     [ B ]     [ C ]\n      \u25b2           \u25b2\n       \\         \/\n        \u2500\u2500\u2500[ D ]\u2500\u2500\u2500<\/code><\/pre>\n<ul class=\"wp-block-list\">\n<li>C3 \u7b97\u6cd5\u6838\u5fc3\u63a8\u5bfc<br>C3 \u7b97\u6cd5\u7684\u516c\u5f0f\u4e3a\uff1aMRO(D) = [D] + merge(MRO(B), MRO(C), [B, C])<\/li>\n\n<li>\u5148\u8ba1\u7b97\u5404\u7236\u7c7b\uff1a<br>(1) MRO(A) = [A, object]<br>(2) MRO(B) = [B, A, object]<br>(3) MRO(C) = [C, A, object]<\/li>\n\n<li>\u4ee3\u5165 D \u5c55\u5f00\uff1a<br>(1) MRO(D) = [D] + merge([B, A, object], [C, A, object], [B, C])<br>(2) \u63d0 B\uff1aB \u662f\u7b2c\u4e00\u4e2a\u5217\u8868\u7684\u5934\uff0c\u4e14\u4e0d\u5728\u5176\u4ed6\u5217\u8868\u7684\u5c3e\u90e8\uff08B \u6ee1\u8db3\u6761\u4ef6\uff09\u3002\u2192 \u5f97\u5230 D, B\u3002<br>(3) \u5269\u4e0b\uff1amerge([A, object], [C, A, object], [C])<br>(4) \u8df3 A \u63d0 C\uff1aA \u5728\u7b2c\u4e8c\u4e2a\u5217\u8868\u7684\u5c3e\u90e8\uff08[C, A\u2026]\uff09\uff0c\u4e0d\u80fd\u63d0\uff01\u6362\u4e0b\u4e00\u4e2a\u5217\u8868\u7684\u5934\u5143\u7d20 C\uff0cC \u6ee1\u8db3\u6761\u4ef6\u3002\u2192 \u5f97\u5230 D, B, C\u3002<br>(5) \u5269\u4e0b\uff1amerge([A, object], [A, object])\u63d0 A \u518d\u63d0 object\u3002<\/li>\n\n<li>\u6700\u7ec8 MRO \u94fe\u6761\uff1aD \u2794 B \u2794 C \u2794 A \u2794 object<\/li>\n\n<li>\u4ee3\u7801\u5b9e\u4f8b<\/li>\n<\/ul>\n<pre class=\"wp-block-code\"><code>class A:\n    def execute(self):\n        print(&quot;\u2794 \u89e6\u53d1 A \u7684\u65b9\u6cd5&quot;)\n\nclass B(A):\n    def execute(self):\n        print(&quot;\u2794 \u89e6\u53d1 B \u7684\u65b9\u6cd5&quot;)\n        super().execute()\n\nclass C(A):\n    def execute(self):\n        print(&quot;\u2794 \u89e6\u53d1 C \u7684\u65b9\u6cd5&quot;)\n        super().execute()\n\nclass D(B, C):\n    def execute(self):\n        print(&quot;\u2794 \u89e6\u53d1 D \u7684\u65b9\u6cd5&quot;)\n        super().execute()\n\n# --- \u9a8c\u8bc1 D \u7684 MRO ---\nprint(&quot;\u3010\u83f1\u5f62\u7ee7\u627f MRO \u94fe\u6761\u3011:&quot;)\nfor idx, cls in enumerate(D.__mro__):\n    print(f&quot;\u4f4d\u7f6e {idx}: {cls.__name__}&quot;)\n\nprint(&quot;\\n\u3010\u6267\u884c\u65b9\u6cd5\u8c03\u7528\u94fe\u3011:&quot;)\nd = D()\nd.execute()<\/code><\/pre>\n<p class=\"wp-block-paragraph\">\u8fd0\u884c\u7ed3\u679c<\/p>\n<pre class=\"wp-block-code\"><code>\u3010\u83f1\u5f62\u7ee7\u627f MRO \u94fe\u6761\u3011:\n\u4f4d\u7f6e 0: D\n\u4f4d\u7f6e 1: B\n\u4f4d\u7f6e 2: C\n\u4f4d\u7f6e 3: A\n\u4f4d\u7f6e 4: object\n\n\u3010\u6267\u884c\u65b9\u6cd5\u8c03\u7528\u94fe\u3011:\n\u2794 \u89e6\u53d1 D \u7684\u65b9\u6cd5\n\u2794 \u89e6\u53d1 B \u7684\u65b9\u6cd5\n\u2794 \u89e6\u53d1 C \u7684\u65b9\u6cd5\n\u2794 \u89e6\u53d1 A \u7684\u65b9\u6cd5<\/code><\/pre>\n<h5 class=\"wp-block-heading\">Mixin \u7ec4\u5408\u7ed3\u6784<\/h5>\n<p class=\"wp-block-paragraph\">\u8fd9\u662f\u5de5\u4e1a\u754c\uff08\u5982 Django \u6846\u67b6\u6e90\u7801\uff09\u6700\u63a8\u5d07\u7684\u7ed3\u6784\u3002\u4e3b\u7ebf\u662f\u4e00\u4e2a\u5e72\u51c0\u7684\u5355\u7ee7\u627f\uff0c\u65c1\u8fb9\u6302\u8f7d\u591a\u4e2a\u53ea\u63d0\u4f9b\u529f\u80fd\u3001\u4e0d\u5e26\u72b6\u6001\u7684 Mixin \u5de5\u5177\u7c7b\u3002<\/p>\n<ul class=\"wp-block-list\">\n<li>\u62d3\u6251\u56fe<\/li>\n<\/ul>\n<pre class=\"wp-block-code\"><code>   [ object ]        [ object ]        [ object ]\n       \u25b2                 \u25b2                 \u25b2\n       \u2502                 \u2502                 \u2502\n   [  Base  ]    [ LogMixin ]   [ AuthMixin ]\n       \u25b2                 \u25b2                 \u25b2\n       \u2502                 \u2502                 \u2502\n       \u2514\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u252c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2534\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2518\n                 \u2502\n           [ MyService ]<\/code><\/pre>\n<ul class=\"wp-block-list\">\n<li>C3 \u7b97\u6cd5\u6838\u5fc3\u63a8\u5bfc<br>\u516c\u5f0f\uff1aMRO(MyService) = [MyService] + merge(MRO(Base), MRO(LogMixin), MRO(AuthMixin), [Base, LogMixin, AuthMixin])<\/li>\n\n<li>\u6309\u7167\u62ec\u53f7\u5185\u4ece\u5de6\u5230\u53f3\u7684\u4f18\u5148\u7ea7\uff0c\u4e14\u7531\u4e8e\u5404\u4e2a Mixin \u4e0e Base \u4e4b\u95f4\u76f8\u4e92\u72ec\u7acb\uff0c\u6ca1\u6709\u4ea4\u53c9\u3002<\/li>\n\n<li>\u62d3\u6251\u6392\u5e8f\u4f1a\u975e\u5e38\u5e72\u51c0\u5730\u4ece\u5de6\u81f3\u53f3\u5207\u7247\u63d0\u53d6\u3002<\/li>\n\n<li>\u6700\u7ec8 MRO \u94fe\u6761\uff1aMyService \u2794 Base \u2794 LogMixin \u2794 AuthMixin \u2794 object<\/li>\n\n<li>\u793a\u4f8b\u4ee3\u7801<\/li>\n<\/ul>\n<pre class=\"wp-block-code\"><code>class Base:\n    def run(self):\n        print(&quot;\u2794 Base: \u6838\u5fc3\u4e1a\u52a1\u903b\u8f91\u6267\u884c\u4e2d&quot;)\n\nclass LogMixin:\n    def run(self):\n        print(&quot;\u2794 LogMixin: \u8bb0\u5f55\u65e5\u5fd7...&quot;)\n        super().run()\n\nclass AuthMixin:\n    def run(self):\n        print(&quot;\u2794 AuthMixin: \u9a8c\u8bc1\u7528\u6237\u6743\u9650...&quot;)\n        super().run()\n\n# \u6309\u7167 MRO \u4f18\u5148\u7ea7\uff1aBase \u2794 LogMixin \u2794 AuthMixin \nclass MyService(Base, LogMixin, AuthMixin):\n    def run(self):\n        print(&quot;\u2794 MyService: \u51c6\u5907\u542f\u52a8\u670d\u52a1&quot;)\n        super().run()\n\n# --- \u9a8c\u8bc1 Mixin \u7ec4\u5408 MRO ---\nprint(&quot;\u3010Mixin \u62d3\u6251 MRO \u94fe\u6761\u3011:&quot;)\nfor idx, cls in enumerate(MyService.__mro__):\n    print(f&quot;\u4f4d\u7f6e {idx}: {cls.__name__}&quot;)\n\nprint(&quot;\\n\u3010\u6267\u884c Mixin \u8c03\u7528\u94fe\u3011:&quot;)\nservice = MyService()\nservice.run()<\/code><\/pre>\n<p class=\"wp-block-paragraph\">\u8fd0\u884c\u7ed3\u679c<\/p>\n<pre class=\"wp-block-code\"><code>\u3010Mixin \u62d3\u6251 MRO \u94fe\u6761\u3011:\n\u4f4d\u7f6e 0: MyService\n\u4f4d\u7f6e 1: Base\n\u4f4d\u7f6e 2: LogMixin\n\u4f4d\u7f6e 3: AuthMixin\n\u4f4d\u7f6e 4: object\n\n\u3010\u6267\u884c Mixin \u8c03\u7528\u94fe\u3011:\n\u2794 MyService: \u51c6\u5907\u542f\u52a8\u670d\u52a1\n\u2794 Base: \u6838\u5fc3\u4e1a\u52a1\u903b\u8f91\u6267\u884c\u4e2d<\/code><\/pre>\n<h5 class=\"wp-block-heading\">\u4ea4\u53c9\u83f1\u5f62\/\u591a\u91cd\u590d\u6742\u7ed3\u6784\uff08Crossed Diamond\uff09<\/h5>\n<p class=\"wp-block-paragraph\">\u5728\u590d\u6742\u6846\u67b6\u8bbe\u8ba1\u4e2d\u53ef\u80fd\u4f1a\u9047\u5230\u8fd9\u79cd\u4ea4\u53c9\u7ed3\u6784\u3002\u4e24\u4e2a\u4e0d\u540c\u7684\u5b50\u7c7b\uff0c\u5206\u522b\u7ee7\u627f\u4e86\u4e24\u4e2a\u4e0d\u540c\u7684\u4ea4\u53c9\u7236\u7c7b\u3002<\/p>\n<ul class=\"wp-block-list\">\n<li>\u62d3\u6251\u56fe<\/li>\n<\/ul>\n<pre class=\"wp-block-code\"><code>           [ object ]\n            \u25b2      \u25b2\n           \/        \\\n       [  X  ]    [  Y  ]\n        \u25b2   \\      \/   \u25b2\n       \/     \\    \/     \\\n     \/        \\  \/       \\\n  [ A ]       [ B ]     [ C ]\n    \u25b2           \u25b2         \u25b2\n     \\          \u2502        \/\n       \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500[ D ]\u2500\u2500\u2500\u2500<\/code><\/pre>\n<ul class=\"wp-block-list\">\n<li>C3 \u7b97\u6cd5\u6838\u5fc3\u63a8\u5bfc<br>\u8fd9\u91cc\u4ee5 A(X), B(X, Y), C(Y) \u4e3a\u8bbe\u5b9a\uff0cD(A, B, C) \u4e3a\u5b50\u7c7b\u3002\u6839\u636e C3 \u7b97\u6cd5\u7684\u5c40\u90e8\u4f18\u5148\u7ea7\u4e0e\u5355\u8c03\u6027\u539f\u5219\u8fdb\u884c Merge \u878d\u5408\uff1a<\/li>\n\n<li>MRO(A) = [A, X, object], MRO(B) = [B, X, Y, object], MRO(C) = [C, Y, object]<\/li>\n\n<li>MRO(D) = [D] + merge(A_list, B_list, C_list, [A, B, C])<\/li>\n\n<li>\u63d0\u53d6 D \u2192 \u63d0\u53d6 A \u2192 \u63d0\u53d6 B\u3002<\/li>\n\n<li>\u6b64\u65f6\u9762\u4e34 X \u548c C \u7684\u53d6\u820d\u3002\u7531\u4e8e X \u662f B \u7684\u7236\u7c7b\uff0c\u4e14 B \u5185\u90e8 X \u6392\u5728 Y \u524d\u9762\uff0c\u800c C \u7ed1\u5b9a Y\u3002C3 \u4f1a\u5b8c\u7f8e\u6839\u636e\u62d3\u6251\u56fe\u7684\u5165\u5ea6\u5148\u63d0\u53d6\u72ec\u7acb\u5206\u652f\u3002<\/li>\n\n<li>\u6700\u7ec8 MRO \u94fe\u6761\uff1aD \u2794 A \u2794 B \u2794 X \u2794 C \u2794 Y \u2794 object (\u6ce8\u610f\uff1a\u7531\u4e8e B \u5f3a\u884c\u628a X \u538b\u5728\u4e86 Y \u524d\u9762\uff0c\u6240\u4ee5 X \u6bd4 C \u66f4\u65e9\u88ab\u63d0\u53d6)\u3002<\/li>\n\n<li>\u793a\u4f8b\u4ee3\u7801<\/li>\n<\/ul>\n<pre class=\"wp-block-code\"><code>class X:\n    def process(self):\n        print(&quot;\u2794 \u89e6\u53d1 X \u7684\u65b9\u6cd5&quot;)\n\nclass Y:\n    def process(self):\n        print(&quot;\u2794 \u89e6\u53d1 Y \u7684\u65b9\u6cd5&quot;)\n\nclass A(X):\n    def process(self):\n        print(&quot;\u2794 \u89e6\u53d1 A \u7684\u65b9\u6cd5&quot;)\n        super().process()\n\nclass B(X, Y):\n    def process(self):\n        print(&quot;\u2794 \u89e6\u53d1 B \u7684\u65b9\u6cd5&quot;)\n        super().process()\n\nclass C(Y):\n    def process(self):\n        print(&quot;\u2794 \u89e6\u53d1 C \u7684\u65b9\u6cd5&quot;)\n        super().process()\n\nclass D(A, B, C):\n    def process(self):\n        print(&quot;\u2794 \u89e6\u53d1 D \u7684\u65b9\u6cd5&quot;)\n        super().process()\n\n# --- \u9a8c\u8bc1\u4ea4\u53c9\u7ed3\u6784 MRO ---\nprint(&quot;\u3010\u590d\u6742\u4ea4\u53c9\u62d3\u6251 MRO \u94fe\u6761\u3011:&quot;)\nfor idx, cls in enumerate(D.__mro__):\n    print(f&quot;\u4f4d\u7f6e {idx}: {cls.__name__}&quot;)\n\nprint(&quot;\\n\u3010\u6267\u884c\u4ea4\u53c9\u62d3\u6251\u8c03\u7528\u94fe\u3011:&quot;)\nd_complex = D()\nd_complex.process()<\/code><\/pre>\n<p class=\"wp-block-paragraph\">\u8fd0\u884c\u7ed3\u679c<\/p>\n<pre class=\"wp-block-code\"><code>\u3010\u590d\u6742\u4ea4\u53c9\u62d3\u6251 MRO \u94fe\u6761\u3011:\n\u4f4d\u7f6e 0: D\n\u4f4d\u7f6e 1: A\n\u4f4d\u7f6e 2: B\n\u4f4d\u7f6e 3: X\n\u4f4d\u7f6e 4: C\n\u4f4d\u7f6e 5: Y\n\u4f4d\u7f6e 6: object\n\n\u3010\u6267\u884c\u4ea4\u53c9\u62d3\u6251\u8c03\u7528\u94fe\u3011:\n\u2794 \u89e6\u53d1 D \u7684\u65b9\u6cd5\n\u2794 \u89e6\u53d1 A \u7684\u65b9\u6cd5\n\u2794 \u89e6\u53d1 B \u7684\u65b9\u6cd5\n\u2794 \u89e6\u53d1 X \u7684\u65b9\u6cd5<\/code><\/pre>\n<p class=\"wp-block-paragraph\">\u603b\u7ed3\u4e3a:\u9047\u5230\u6709\u516c\u5171\u7684\u7236\u7c7b\u505c\u6b62\u641c\u7d22,\u5f80\u540e\u67e5\u627e,\u7136\u540e\u52a0\u4e0a\u8fd9\u4e2a\u7236\u7c7b\u3002<\/p>\n<h3 class=\"wp-block-heading\">7.\u591a\u6001<\/h3>\n<p class=\"wp-block-paragraph\">\u591a\u6001\uff08Polymorphic\uff09 \u7684\u5b57\u9762\u610f\u601d\u662f\u201c\u591a\u79cd\u72b6\u6001\u201d\u3002\u5728\u9762\u5411\u5bf9\u8c61\u7f16\u7a0b\u4e2d\uff0c\u5b83\u7684\u6838\u5fc3\u5b9a\u4e49\u662f\uff1a\u540c\u4e00\u6761\u8c03\u7528\u8bed\u53e5\uff0c\u5728\u4f20\u5165\u4e0d\u540c\u7684\u5bf9\u8c61\u65f6\uff0c\u80fd\u591f\u81ea\u52a8\u5c55\u73b0\u51fa\u4e0d\u540c\u7684\u884c\u4e3a\u3002<\/p>\n<h5 class=\"wp-block-heading\">Python \u591a\u6001\u7684\u7075\u9b42\uff1a\u9e2d\u5b50\u7c7b\u578b\uff08Duck Typing\uff09<\/h5>\n<p class=\"wp-block-paragraph\">\u5728 C++ \u6216 Java \u7b49\u9759\u6001\u8bed\u8a00\u4e2d\uff0c\u8981\u5b9e\u73b0\u591a\u6001\uff0c\u4e24\u4e2a\u7c7b\u5fc5\u987b\u7ee7\u627f\u81ea\u540c\u4e00\u4e2a\u7236\u7c7b\uff08\u6216\u8005\u5b9e\u73b0\u540c\u4e00\u4e2a\u63a5\u53e3\uff09\u3002\u4f46\u5728 Python \u4e2d\uff0c\u591a\u6001\u5b8c\u5168\u4e0d\u9700\u8981\u4f9d\u8d56\u7ee7\u627f\uff01Python \u9075\u5faa\u7684\u662f\u8457\u540d\u7684 \u201c\u9e2d\u5b50\u7c7b\u578b\u201d \u54f2\u5b66\uff1a<\/p>\n<blockquote class=\"wp-block-quote is-layout-flow wp-block-quote-is-layout-flow\">\n<p class=\"wp-block-paragraph\">\u5982\u679c\u4e00\u53ea\u9e1f\u8d70\u8d77\u6765\u50cf\u9e2d\u5b50\uff0c\u6e38\u6cf3\u8d77\u6765\u50cf\u9e2d\u5b50\uff0c\u53eb\u8d77\u6765\u4e5f\u50cf\u9e2d\u5b50\uff0c\u90a3\u4e48\u5b83\u5c31\u662f\u9e2d\u5b50\u3002<\/p>\n<\/blockquote>\n<p class=\"wp-block-paragraph\">\u5e95\u5c42\u672c\u8d28\uff1aPython \u5728\u6267\u884c obj.quack() \u65f6\uff0c\u5e95\u5c42\u7684\u63cf\u8ff0\u7b26\u548c\u5c5e\u6027\u67e5\u627e\u673a\u5236\u6839\u672c\u4e0d\u5728\u4e4e obj \u7684\u4eb2\u7239\u662f\u8c01\uff08\u4e0d\u5728\u4e4e\u7ee7\u627f\u94fe\uff09\u3002\u5b83\u552f\u4e00\u5728\u4e4e\u7684\u662f\uff1a\u6b64\u65f6\u6b64\u523b\uff0cobj.<strong>dict<\/strong> \u6216\u8005\u5b83\u6240\u5c5e\u7c7b\u7684\u4ed3\u5e93\u91cc(\u9075\u5faaMRO\u641c\u7d22)\uff0c\u6709\u6ca1\u6709\u4e00\u4e2a\u53eb quack \u7684\u952e\uff1f \u53ea\u8981\u6709\uff0c\u5b83\u5c31\u80fd\u6210\u529f\u89e6\u53d1\u5e76\u8fd0\u884c\uff01<br>\u793a\u4f8b:<\/p>\n<pre class=\"wp-block-code\"><code>class Duck:\n    def quack(self):\n        print(&quot;\ud83e\udd86 \u9e2d\u5b50\u5728\u560e\u560e\u53eb...&quot;)\n\nclass Robot:\n    def quack(self):\n        print(&quot;\ud83e\udd16 \u673a\u5668\u4eba\u6a21\u4eff\u9e2d\u5b50\u53eb\uff1a\u54d4\u54d4\u560e\u560e\uff01&quot;)\n\n# \u7edf\u4e00\u7684\u8c03\u7528\u63a5\u53e3\u51fd\u6570\ndef make_it_quack(animal_obj):\n    # \u8fd9\u4e00\u6761\u76f8\u540c\u7684\u8bed\u53e5\uff0c\u4f20\u5165\u4e0d\u540c\u5bf9\u8c61\uff0c\u5c55\u73b0\u4e0d\u540c\u884c\u4e3a\n    animal_obj.quack() \n\n# --- \u6d4b\u8bd5\u591a\u6001 ---\nduck = Duck()\nbot = Robot()\n\nmake_it_quack(duck)  # \u8f93\u51fa: \ud83e\udd86 \u9e2d\u5b50\u5728\u560e\u560e\u53eb...\nmake_it_quack(bot)   # \u8f93\u51fa: \ud83e\udd16 \u673a\u5668\u4eba\u6a21\u4eff\u9e2d\u5b50\u53eb\uff1a\u54d4\u54d4\u560e\u560e\uff01<\/code><\/pre>\n<p class=\"wp-block-paragraph\">\u8fd0\u884c\u7ed3\u679c<\/p>\n<pre class=\"wp-block-code\"><code>\ud83e\udd86 \u9e2d\u5b50\u5728\u560e\u560e\u53eb...\n\ud83e\udd16 \u673a\u5668\u4eba\u6a21\u4eff\u9e2d\u5b50\u53eb\uff1a\u54d4\u54d4\u560e\u560e\uff01<\/code><\/pre>\n<p class=\"wp-block-paragraph\">\u672c\u8d28\uff1amake_it_quack \u51fd\u6570\u5bf9\u8f93\u5165\u7684 animal_obj \u6ca1\u6709\u4efb\u4f55\u7c7b\u578b\u9650\u5236\u3002\u70b9\u53f7 . \u89e6\u53d1\u65f6\uff0c\u5982\u679c\u662f duck\uff0c\u5c31\u53bb Duck.<strong>dict<\/strong> \u627e\u65b9\u6cd5\uff1b\u5982\u679c\u662f bot\uff0c\u5c31\u53bb Robot.<strong>dict<\/strong> \u627e\u65b9\u6cd5\u3002\u4e24\u8005\u7684\u4e2a\u4f53\u72ec\u7acb\u5f00\u8f9f\u5185\u5b58\u7a7a\u95f4\uff0c\u4e92\u4e0d\u5e72\u6270\uff0c\u4ece\u800c\u5b8c\u7f8e\u5c55\u73b0\u51fa\u591a\u6001\u3002<\/p>\n<h5 class=\"wp-block-heading\">\u7ecf\u5178\u7684\u7ee7\u627f\u5f0f\u591a\u6001<\/h5>\n<p class=\"wp-block-paragraph\">\u867d\u7136 Python \u4e0d\u9700\u8981\u7ee7\u627f\u5c31\u80fd\u73a9\u8f6c\u591a\u6001\uff0c\u4f46\u5728\u5927\u578b\u9879\u76ee\u8bbe\u8ba1\u4e2d\uff0c\u6211\u4eec\u7ecf\u5e38\u7ed3\u5408\u7ee7\u627f\u548c\u65b9\u6cd5\u91cd\u5199\uff08Override\uff09\u6765\u5b9e\u73b0\u66f4\u89c4\u8303\u7684\u591a\u6001\u3002<br>\u7ee7\u627f\u5f0f\u591a\u6001\u4ee3\u7801\u793a\u4f8b:<\/p>\n<pre class=\"wp-block-code\"><code>class FileParser:\n    &quot;&quot;&quot;\u62bd\u8c61\u7236\u7c7b\uff08\u5b9a\u4e49\u89c4\u8303\uff09&quot;&quot;&quot;\n    def parse(self):\n        raise NotImplementedError(&quot;\u5b50\u7c7b\u5fc5\u987b\u91cd\u5199\u6b64\u65b9\u6cd5\uff01&quot;)\n\nclass JsonParser(FileParser):\n    def parse(self):\n        print(&quot;\ud83d\udccb \u6b63\u5728\u89e3\u6790 JSON \u6587\u4ef6...&quot;)\n\nclass XmlParser(FileParser):\n    def parse(self):\n        print(&quot;\ud83d\udcc4 \u6b63\u5728\u89e3\u6790 XML \u6587\u4ef6...&quot;)\n\n# \u7edf\u4e00\u8c03\u7528\u51fd\u6570\ndef start_parsing(parser_obj):\n    parser_obj.parse()\n\n# --- \u6d4b\u8bd5\u8fd0\u884c ---\nparsers = [JsonParser(), XmlParser()]\nfor p in parsers:\n    start_parsing(p)<\/code><\/pre>\n<p class=\"wp-block-paragraph\">\u8fd0\u884c\u7ed3\u679c<\/p>\n<pre class=\"wp-block-code\"><code>\ud83d\udccb \u6b63\u5728\u89e3\u6790 JSON \u6587\u4ef6...\n\ud83d\udcc4 \u6b63\u5728\u89e3\u6790 XML \u6587\u4ef6...<\/code><\/pre>\n<h3 class=\"wp-block-heading\">8.\u5143\u7c7b<\/h3>\n<p class=\"wp-block-paragraph\">\u4ec0\u4e48\u662f\u5143\u7c7b:\u901a\u4fd7\u8bb2,\u80fd\u72d7\u5426\u521b\u5efa\u7c7b\u7684\u7c7b<\/p>\n<p class=\"wp-block-paragraph\"><strong><em>\u666e\u901a\u7c7b\u662f\u521b\u5efa\u5b9e\u4f8b\u5bf9\u8c61\u7684\u6a21\u677f\uff0c\u800c\u5143\u7c7b\u662f\u521b\u5efa\u7c7b\u5bf9\u8c61\u7684\u6a21\u677f\u3002<\/em><\/strong><br>\u5982\u679c\u4e00\u4e2a\u7c7b\u6ca1\u6709\u6307\u5b9a\u81ea\u5b9a\u4e49\u5143\u7c7bmetaclass,\u90a3\u4e48\u8fd9\u4e2a\u7c7b\u57fa\u672c\u90fd\u662f\u7531type\u7c7b\u521b\u5efa,\u6240\u4ee5type\u7c7b\u662f\u5143\u7c7b\u3002<\/p>\n<h4 class=\"wp-block-heading\">type\u5143\u7c7b<\/h4>\n<p class=\"wp-block-paragraph\">type\u7c7b\u662f\u5143\u7c7b,\u4e5f\u5c31\u662f\u80fd\u591f\u521b\u5efa\u7c7b<\/p>\n<ul class=\"wp-block-list\">\n<li>\u521b\u5efa\u7c7b\u7684\u8bed\u6cd5\u683c\u5f0f<br>type(&#8220;\u7c7b\u540d\u5b57\u7b26\u4e32&#8221;, (\u7236\u7c7b1, \u7236\u7c7b2, \u2026), {\u7c7b\u5c5e\u6027\u4e0e\u65b9\u6cd5\u7684\u5b57\u5178})<\/li>\n\n<li>\u7b2c\u4e00\u4e2a\u53c2\u6570\uff08name\uff09\uff1a&#8221;\u7c7b\u540d\u5b57\u7b26\u4e32&#8221;\u3002\u5b9a\u4e49\u7c7b\u7684\u540d\u5b57\uff08\u5373\u7c7b\u5bf9\u8c61\u7684 <strong>name<\/strong> \u5c5e\u6027\uff09\u3002<\/li>\n\n<li>\u7b2c\u4e8c\u4e2a\u53c2\u6570\uff08bases\uff09\uff1a(\u7236\u7c7b1, \u7236\u7c7b2, \u2026)\u3002\u5fc5\u987b\u662f\u4e00\u4e2a\u5143\u7ec4\uff08Tuple\uff09\u3002\u5b9a\u4e49\u7c7b\u7684\u7ee7\u627f\u94fe\uff0c\u76f4\u63a5\u51b3\u5b9a\u4e86\u8be5\u7c7b\u672a\u6765\u7684 <strong>mro<\/strong> \u987a\u5e8f\u3002\u5982\u679c\u53ea\u7ee7\u627f object\uff0c\u5fc5\u987b\u5199\u6210\u5355\u5143\u7d20\u5143\u7ec4 (object,)\uff0c\u540e\u9762\u7684\u9017\u53f7\u4e0d\u80fd\u7701\u7565\u3002<\/li>\n\n<li>\u7b2c\u4e09\u4e2a\u53c2\u6570\uff08dict\uff09\uff1a{\u7c7b\u5c5e\u6027\u4e0e\u65b9\u6cd5\u7684\u5b57\u5178}\u3002\u5b9a\u4e49\u7c7b\u7684\u6210\u5458\u3002\u8fd9\u91cc\u9762\u5199\u7684\u6240\u6709\u952e\u503c\u5bf9\uff0c\u5728\u7c7b\u8bde\u751f\u540e\u4f1a\u76f4\u63a5\u6ce8\u5165\u5230\u8be5\u7c7b\u7684 <strong>dict<\/strong> \u4ed3\u5e93\u4e2d\u3002<\/li>\n<\/ul>\n<p class=\"wp-block-paragraph\">\u4f20\u7edf\u521b\u5efa\u7c7b\u65b9\u5f0f\u793a\u4f8b:<\/p>\n<pre class=\"wp-block-code\"><code>class BaseRobot:\n    # 1. \u7c7b\u5c5e\u6027\n    species = &quot;AI&quot;\n\n    # 2. \u5b9e\u4f8b\u65b9\u6cd5\n    def __init__(self, name):\n        self.name = name\n\n    def walk(self):\n        print(f&quot;{self.name} \u6b63\u5728\u884c\u8d70...&quot;)\n\n    # 3. \u9759\u6001\u65b9\u6cd5\n    @staticmethod\n    def info():\n        print(&quot;\u8fd9\u662f\u4e00\u4e2a\u673a\u5668\u4eba\u57fa\u7840\u7c7b&quot;)<\/code><\/pre>\n<p class=\"wp-block-paragraph\">type\u5143\u7c7b\u521b\u5efa\u793a\u4f8b:<\/p>\n<pre class=\"wp-block-code\"><code>def robot_init(self, name):\n    self.name = name\n\ndef robot_walk(self):\n    print(f&quot;{self.name} \u6b63\u5728\u884c\u8d70...&quot;)\n\ndef robot_info():\n    print(&quot;\u8fd9\u662f\u4e00\u4e2a\u673a\u5668\u4eba\u57fa\u7840\u7c7b&quot;)\n\n# ---- \u6838\u5fc3\uff1a\u4f7f\u7528 type \u521b\u5efa\u7c7b ----\nDynamicRobot = type(\n    &quot;BaseRobot&quot;,       # 1. \u7c7b\u540d\n    (object,),         # 2. \u7236\u7c7b\u5143\u7ec4\n    {                  # 3. \u7c7b\u4ed3\u5e93\u5b57\u5178\uff08__dict__ \u7684\u539f\u6750\u6599\uff09\n        &quot;species&quot;: &quot;AI&quot;,\n        &quot;__init__&quot;: robot_init,\n        &quot;walk&quot;: robot_walk,\n        &quot;info&quot;: staticmethod(robot_info)  # \u6ce8\u610f\uff1a\u9759\u6001\u65b9\u6cd5\u9700\u8981\u7528 staticmethod \u5305\u88c5\u5668\u5305\u88f9\n    }\n)<\/code><\/pre>\n<p class=\"wp-block-paragraph\">\u65e0\u8bba\u7528\u54ea\u79cd\u5f62\u5f0f\u521b\u5efa\uff0c\u52a8\u6001\u751f\u6210\u7684 DynamicRobot \u5728\u5e95\u5c42\u7684\u5c5e\u6027\u8bbf\u95ee\u548c\u5185\u5b58\u8868\u73b0\u4e0a\u6ca1\u6709\u4efb\u4f55\u533a\u522b;\u4f20\u7edf\u5199\u6cd5\u7684 class BaseRobot: \u8bed\u6cd5\uff0c\u5176\u5b9e\u5c31\u662f Python \u89e3\u91ca\u5668\u5728\u540e\u53f0\u5e2e\u4f60\u81ea\u52a8\u6267\u884c\u4e86\u4e00\u53e5 type(&#8220;BaseRobot&#8221;, (object,), {\u2026})\u3002\u53ea\u4e0d\u8fc7\u4f20\u7edf\u65b9\u5f0f\u66f4\u76f4\u89c2\u70b9,\u5176\u5b9e\u90fd\u662ftype\u521b\u5efa\u3002<\/p>\n<p class=\"wp-block-paragraph\"><strong><em>type\u5143\u7c7b\u53ef\u4ee5\u521b\u5efa\u7c7b,\u90a3\u4e48\u6211\u4eec\u662f\u5426\u53ef\u4ee5\u57fa\u4e8e\u8fd9\u4e2a\u7c7b\u81ea\u5df1\u5b9a\u4e49\u4e00\u4e2a\u5143\u7c7b\u5462?<\/em><\/strong><br>\u5b8c\u5168\u662f\u53ef\u4ee5\u7684,\u8fd9\u5c31\u662f\u81ea\u5b9a\u4e49\u7c7b,\u521b\u5efa\u7c7b\u65f6\u901a\u8fc7metaclass\u6307\u5b9a\u81ea\u5b9a\u4e49\u7684\u7c7b\u3002<br>\u793a\u4f8b<\/p>\n<pre class=\"wp-block-code\"><code># 1. \u5fc5\u987b\u7ee7\u627f type\uff0c\u624d\u80fd\u6210\u4e3a\u4e00\u4e2a\u5408\u6cd5\u7684\u5143\u7c7b\uff08\u8d85\u7ea7\u56fe\u7eb8\uff09\nclass BaseCustomMeta(type):\n\n    # \u91cd\u5199 __new__ \u65b9\u6cd5\uff0c\u62e6\u622a\u7c7b\u5bf9\u8c61\u7684\u8bde\u751f\u8fc7\u7a0b\n    # mcs: \u5143\u7c7b\u81ea\u5df1, name: \u5373\u5c06\u8bde\u751f\u7684\u7c7b\u540d\u5b57\u7b26\u4e32, bases: \u7236\u7c7b\u5143\u7ec4, attrs: \u7c7b\u4ed3\u5e93\u7684\u539f\u6750\u6599\u5b57\u5178\n    def __new__(mcs, name, bases, attrs):\n        print(f&quot;\ud83d\ude80 [\u5143\u7c7b\u89e6\u53d1] \u53d1\u73b0\u7c7b '{name}' \u6b63\u5728\u51c6\u5907\u521b\u5efa...&quot;)\n\n        # \u3010\u6838\u5fc3\u9ed1\u9b54\u6cd5\u53d1\u751f\u5730\u3011\n        # \u6b64\u65f6\u7c7b\u8fd8\u6ca1\u5728\u5185\u5b58\u4e2d\u8bde\u751f\uff0cattrs \u53ea\u662f\u4e00\u4e2a\u7eaf\u7cb9\u7684 Python \u5b57\u5178(dict)\n        # \u65e2\u7136\u662f\u666e\u901a\u5b57\u5178\uff0c\u6211\u4eec\u5c31\u53ef\u4ee5\u7528\u6700\u57fa\u7840\u7684\u8bed\u6cd5\u76f4\u63a5\u5f80\u91cc\u5199\u6570\u636e\uff01\n        attrs[&quot;PROJECT_VERSION&quot;] = &quot;2026.08.03&quot;\n\n        print(f&quot;\ud83d\udee0\ufe0f [\u5143\u7c7b\u52a8\u6001\u7be1\u6539] \u6210\u529f\u5f80\u7c7b '{name}' \u7684 attrs \u5b57\u5178\u91cc\u6ce8\u5165\u4e86 PROJECT_VERSION \u5c5e\u6027\uff01&quot;)\n\n        # 2. \u6700\u7ec8\u5fc5\u987b\u8c03\u7528\u7236\u7c7b type.__new__\uff0c\u628a\u4fee\u6539\u540e\u7684 attrs \u4f20\u8fc7\u53bb\uff0c\u771f\u6b63\u5f00\u8f9f\u5185\u5b58\u521b\u9020\u51fa\u7c7b\u5bf9\u8c61\n        return super().__new__(mcs, name, bases, attrs)\n\n# \u7f16\u5199\u666e\u901a\u7c7b\uff0c\u901a\u8fc7 metaclass \u8f6c\u5411\u6211\u4eec\u7684\u57fa\u7840\u81ea\u5b9a\u4e49\u5143\u7c7b\nclass BaseRobot(metaclass=BaseCustomMeta):\n    def __init__(self, name):\n        self.name = name\n\n# --- \u9a8c\u8bc1\u4e0e\u6d4b\u8bd5 ---\nprint(&quot;\\n--- \ud83c\udfc1 \u5f00\u59cb\u6d4b\u8bd5\u5e95\u5c42\u5185\u5b58\u95ed\u73af ---&quot;)\n\n# 1. \u76f4\u63a5\u901a\u8fc7\u7c7b\u540d\u8bbf\u95ee\u88ab\u5143\u7c7b\u5077\u5077\u6ce8\u5165\u7684\u7c7b\u5c5e\u6027\nprint(f&quot;1. BaseRobot \u7c7b\u5c5e\u6027\u4e2d\u662f\u5426\u5b58\u5728\u6ce8\u5165\u503c? -&gt; {BaseRobot.PROJECT_VERSION}&quot;)\n\n# 2. \u5b9e\u4f8b\u5316\u5bf9\u8c61\uff0c\u770b\u770b\u5b9e\u4f8b\u80fd\u4e0d\u80fd\u987a\u7740\u7ee7\u627f\u67e5\u627e\u94fe\u62ff\u5230\u5b83\nbot = BaseRobot(&quot;Wall-E&quot;)\nprint(f&quot;2. \u5b9e\u4f8b\u5bf9\u8c61 bot \u987a\u7740\u67e5\u627e\u94fe\u8bbf\u95ee\u5230\u503c\u4e86\u5417? -&gt; {bot.PROJECT_VERSION}&quot;)\n\n# 3. \u5f7b\u5e95\u9a8c\u660e\u6b63\u8eab\uff0c\u770b\u770b\u7c7b\u7684\u5988\u5988\u5230\u5e95\u662f\u8c01\nprint(f&quot;3. BaseRobot \u7c7b\u7684\u7c7b\u578b\uff08\u4e5f\u5c31\u662f\u5b83\u7684\u5143\u7c7b\uff09\u662f? -&gt; {type(BaseRobot)}&quot;)<\/code><\/pre>\n<p class=\"wp-block-paragraph\">\u8fd0\u884c\u7ed3\u679c<\/p>\n<pre class=\"wp-block-code\"><code>\ud83d\ude80 [\u5143\u7c7b\u89e6\u53d1] \u53d1\u73b0\u7c7b 'BaseRobot' \u6b63\u5728\u51c6\u5907\u521b\u5efa...\n\ud83d\udee0\ufe0f [\u5143\u7c7b\u52a8\u6001\u7be1\u6539] \u6210\u529f\u5f80\u7c7b 'BaseRobot' \u7684 attrs \u5b57\u5178\u91cc\u6ce8\u5165\u4e86 PROJECT_VERSION \u5c5e\u6027\uff01\n\n--- \ud83c\udfc1 \u5f00\u59cb\u6d4b\u8bd5\u5e95\u5c42\u5185\u5b58\u95ed\u73af ---\n1. BaseRobot \u7c7b\u5c5e\u6027\u4e2d\u662f\u5426\u5b58\u5728\u6ce8\u5165\u503c? -&gt; 2026.08.03\n2. \u5b9e\u4f8b\u5bf9\u8c61 bot \u987a\u7740\u67e5\u627e\u94fe\u8bbf\u95ee\u5230\u503c\u4e86\u5417? -&gt; 2026.08.03\n3. BaseRobot \u7c7b\u7684\u7c7b\u578b\uff08\u4e5f\u5c31\u662f\u5b83\u7684\u5143\u7c7b\uff09\u662f? -&gt; &lt;class '__main__.BaseCustomMeta'&gt;<\/code><\/pre>\n<p class=\"wp-block-paragraph\">\u5230\u8fd9\u91cc\u6211\u4eec\u53c8\u53d1\u73b0\u4e86\u4e00\u4e2a\u95ee\u9898:<br>\u6211\u4eec\u5728\u81ea\u5b9a\u4e49\u7684BaseCustomMeta\u5143\u7c7b\u4e2d\u6211\u4eec\u91cd\u5199\u4e86<strong>new<\/strong>\u65b9\u6cd5,\u6ca1\u6709\u91cd\u5199<strong>call<\/strong>\u65b9\u6cd5,\u4e3a\u4f55\u6ca1\u62a5\u9519?\u800c\u6211\u95e8\u5b9a\u4e49\u7684\u666e\u901a\u7c7b\u5b9e\u4f8b\u5bf9\u8c61\u6dfb\u52a0()\u65f6\u5982\u679c\u6ca1\u91cd\u5199<strong>call<\/strong>\u65b9\u6cd5\u7684,\u4f46\u662f\u4f1a\u62a5\u9519\uff0c\u539f\u56e0\u5728\u54ea\u91cc\uff1f<\/p>\n<ul class=\"wp-block-list\">\n<li>\u56e0\u4e3a\u666e\u901a\u7c7b\u52a0(),\u8c03\u7528\u7684\u662f\u521b\u5efa\u5b83\u7684type\u5143\u7c7b\u7684<strong>call<\/strong>\u65b9\u6cd5,\u800c\u5b9e\u4f8b\u5bf9\u8c61\u6dfb\u52a0()\u65f6\u662f\u4ece\u521b\u5efa\u5b83\u7684\u666e\u901a\u7c7b\u4e2d\u627e<strong>call<\/strong>\u65b9\u6cd5,\u666e\u901a\u7c7b\u53ea\u7ee7\u627fobject\u7c7b,object\u7c7b\u6ca1\u6709<strong>call<\/strong>\u65b9\u6cd5,\u5982\u679c\u666e\u901a\u7c7b\u6ca1\u6709\u5199<strong>call<\/strong>\u65b9\u6cd5,\u666e\u901a\u7c7b\u5b9e\u4f8b\u5bf9\u8c61\u6dfb\u52a0()\u662f\u627e\u4e0d\u5230<strong>call<\/strong>\u65b9\u6cd5\u7684\u3002<\/li>\n\n<li>\u8fd9\u91cc\u81ea\u5b9a\u4e49\u5143\u7c7bBaseCustomMeta\u91cc\u7ee7\u627f\u4e86type\u5143\u7c7b,\u5f53bot = BaseRobot(&#8220;Wall-E&#8221;)\u65f6\u5b83\u4f1a\u8c03\u7528\u5143\u7c7bBaseCustomMeta\u7684call\u65b9\u6cd5,\u6839\u636e\u7ee7\u627f\u539f\u5219,\u5143\u7c7bBaseCustomMeta\u4f1a\u7ee7\u627ftype\u7684<strong>call<\/strong>\u65b9\u6cd5\u3002<\/li>\n\n<li>\u5728\u7ee7\u627f\u7684<strong>call_\u65b9\u6cd5\u91cc\u4f1a\u8c03\u7528object\u7684__new<\/strong>\u65b9\u6cd5,\u800cBaseCustomMeta\u5143\u7c7b\u4e2d\u91cd\u5199\u7684<strong>new<\/strong>\u65b9\u6cd5\u662f\u7528\u6765\u521b\u5efaBaseRobot\u7c7b\u7684<strong>new<\/strong>\u65b9\u6cd5,\u662f\u7528\u6765\u521b\u5efaBaseRobot\u7c7b,\u91cd\u5199\u4f5c\u7528\u662f\u5411BaseRobot\u7c7b\u4e2d\u6ce8\u518c\u7c7b\u53d8\u91cfPROJECT_VERSION,\u800c\u4e0d\u662f\u7528\u6765\u521b\u5efaBaseRobot\u7c7b\u5b9e\u4f8b\u7684<strong>new<\/strong>\u65b9\u6cd5\u3002<\/li>\n<\/ul>\n<p class=\"wp-block-paragraph\">\u8fd9\u91cc\u5c31\u53ef\u4ee5\u603b\u7ed3\u4e86:<\/p>\n<ul class=\"wp-block-list\">\n<li>type\u5143\u7c7b\u7684<strong>call<\/strong>\u65b9\u6cd5\u5e95\u5c42\u8c03\u7528\u7684<strong>new<\/strong>\u65b9\u6cd5\u5c31\u662fobject\u7c7b\u7684<strong>new<\/strong>\u65b9\u6cd5\u3002<\/li>\n\n<li>type\u5143\u7c7b\u7684<strong>new<\/strong>\u65b9\u6cd5\u7528\u6765\u521b\u5efa\u7c7b<\/li>\n\n<li>\u666e\u901a\u7c7b\u7684\u5b9e\u4f8b\u7531object\u7c7b\u7684<strong>new<\/strong>\u65b9\u6cd5\u521b\u5efa,\u4e2d\u95f4\u8fd8\u9700\u8981\u901a\u8fc7<strong>call<\/strong>\u65b9\u6cd5<\/li>\n<\/ul>\n<p class=\"wp-block-paragraph\">\u6211\u4eec\u5c1d\u8bd5\u5728IDE\u70b9\u51fbtype\u67e5\u627e<strong>call<\/strong>\u6e90\u7801<\/p>\n<pre class=\"wp-block-code\"><code>    def __call__(self, *args, **kwargs): # real signature unknown\n        &quot;&quot;&quot; Call self as a function. &quot;&quot;&quot;\n        pass<\/code><\/pre>\n<p class=\"wp-block-paragraph\">\u7ed3\u679c\u662freal signature unknown(\u771f\u5b9e\u7b7e\u540d\u672a\u77e5)<br>\u5728\u5b9e\u9645\u8fd0\u884c\u65f6\uff0c\u8fd9\u884c Python \u5c42\u7684 pass \u4ee3\u7801\u8fde\u4e00\u5fae\u79d2\u90fd\u6ca1\u6709\u88ab\u6267\u884c\u8fc7\uff0c\u5b83\u7eaf\u7cb9\u662f\u4e2a\u6446\u8bbe\u3002\u89e3\u91ca\u5668\u5e95\u5c42\u7684\u8bed\u6cd5\u89e3\u6790\u5668\u5728\u96f6\u70b9\u51e0\u5fae\u79d2\u5185\u5c31\u4f1a\u76f4\u63a5\u4ea7\u751f\u7269\u7406\u95ea\u73b0\uff0c\u7ed5\u8fc7\u6240\u6709\u7684 Python \u4ee3\u7801\uff0c\u76f4\u63a5\u5f3a\u884c\u51b2\u8fdb C \u8bed\u8a00\u7684 type_call \u8f66\u95f4\u4e2d\u53bb\u6267\u884c\uff01<\/p>\n<p class=\"wp-block-paragraph\">\u6211\u4eec\u4ece\u7f51\u4e0a\u627e\u5230type\u5143\u7c7b<strong>call<\/strong>\u65b9\u6cd5\u7684C\u5b9e\u73b0<br>https:\/\/github.com\/python\/cpython\/blob\/main\/Objects\/typeobject.c<\/p>\n<pre class=\"wp-block-code\"><code>static PyObject *\ntype_call(PyObject *self, PyObject *args, PyObject *kwds)\n{\n    PyTypeObject *type = PyTypeObject_CAST(self);\n    PyObject *obj;\n    PyThreadState *tstate = _PyThreadState_GET();\n\n#ifdef Py_DEBUG\n    \/* type_call() must not be called with an exception set,\n       because it can clear it (directly or indirectly) and so the\n       caller loses its exception *\/\n    assert(!_PyErr_Occurred(tstate));\n#endif\n\n    \/* Special case: type(x) should return Py_TYPE(x) *\/\n    \/* We only want type itself to accept the one-argument form (#27157) *\/\n    if (type == &amp;PyType_Type) {\n        assert(args != NULL &amp;&amp; PyTuple_Check(args));\n        assert(kwds == NULL || PyDict_Check(kwds));\n        Py_ssize_t nargs = PyTuple_GET_SIZE(args);\n\n        if (nargs == 1 &amp;&amp; (kwds == NULL || !PyDict_GET_SIZE(kwds))) {\n            obj = (PyObject *) Py_TYPE(PyTuple_GET_ITEM(args, 0));\n            return Py_NewRef(obj);\n        }\n\n        \/* SF bug 475327 -- if that didn't trigger, we need 3\n           arguments. But PyArg_ParseTuple in type_new may give\n           a msg saying type() needs exactly 3. *\/\n        if (nargs != 3) {\n            PyErr_SetString(PyExc_TypeError,\n                            &quot;type() takes 1 or 3 arguments&quot;);\n            return NULL;\n        }\n    }\n\n    if (type-&gt;tp_new == NULL) {\n        _PyErr_Format(tstate, PyExc_TypeError,\n                      &quot;cannot create '%s' instances&quot;, type-&gt;tp_name);\n        return NULL;\n    }\n\n    obj = type-&gt;tp_new(type, args, kwds);\n    obj = _Py_CheckFunctionResult(tstate, (PyObject*)type, obj, NULL);\n    if (obj == NULL)\n        return NULL;\n\n    \/* If the returned object is not an instance of type,\n       it won't be initialized. *\/\n    if (!PyObject_TypeCheck(obj, type))\n        return obj;\n\n    type = Py_TYPE(obj);\n    if (type-&gt;tp_init != NULL) {\n        int res = type-&gt;tp_init(obj, args, kwds);\n        if (res &lt; 0) {\n            assert(_PyErr_Occurred(tstate));\n            Py_SETREF(obj, NULL);\n        }\n        else {\n            assert(!_PyErr_Occurred(tstate));\n        }\n    }\n    return obj;\n}<\/code><\/pre>\n<pre class=\"wp-block-code\"><code>static PyObject *\nobject_new(PyTypeObject *type, PyObject *args, PyObject *kwds)\n{\n    if (excess_args(args, kwds)) {\n        if (type-&gt;tp_new != object_new) {\n            PyErr_SetString(PyExc_TypeError,\n                            &quot;object.__new__() takes exactly one argument (the type to instantiate)&quot;);\n            return NULL;\n        }\n        if (type-&gt;tp_init == object_init) {\n            PyErr_Format(PyExc_TypeError, &quot;%.200s() takes no arguments&quot;,\n                         type-&gt;tp_name);\n            return NULL;\n        }\n    }\n\n    if (type-&gt;tp_flags &amp; Py_TPFLAGS_IS_ABSTRACT) {\n        PyObject *abstract_methods;\n        PyObject *sorted_methods;\n        PyObject *joined;\n        PyObject* comma_w_quotes_sep;\n        Py_ssize_t method_count;\n\n        \/* Compute &quot;', '&quot;.join(sorted(type.__abstractmethods__))\n           into joined. *\/\n        abstract_methods = type_abstractmethods((PyObject *)type, NULL);\n        if (abstract_methods == NULL)\n            return NULL;\n        sorted_methods = PySequence_List(abstract_methods);\n        Py_DECREF(abstract_methods);\n        if (sorted_methods == NULL)\n            return NULL;\n        if (PyList_Sort(sorted_methods)) {\n            Py_DECREF(sorted_methods);\n            return NULL;\n        }\n        comma_w_quotes_sep = PyUnicode_FromString(&quot;', '&quot;);\n        if (!comma_w_quotes_sep) {\n            Py_DECREF(sorted_methods);\n            return NULL;\n        }\n        joined = PyUnicode_Join(comma_w_quotes_sep, sorted_methods);\n        Py_DECREF(comma_w_quotes_sep);\n        if (joined == NULL)  {\n            Py_DECREF(sorted_methods);\n            return NULL;\n        }\n        method_count = PyObject_Length(sorted_methods);\n        Py_DECREF(sorted_methods);\n        if (method_count == -1) {\n            Py_DECREF(joined);\n            return NULL;\n        }\n\n        PyErr_Format(PyExc_TypeError,\n                     &quot;Can't instantiate abstract class %s &quot;\n                     &quot;without an implementation for abstract method%s '%U'&quot;,\n                     type-&gt;tp_name,\n                     method_count &gt; 1 ? &quot;s&quot; : &quot;&quot;,\n                     joined);\n        Py_DECREF(joined);\n        return NULL;\n    }\n    PyObject *obj = type-&gt;tp_alloc(type, 0);\n    if (obj == NULL) {\n        return NULL;\n    }\n    return obj;\n}<\/code><\/pre>\n<p class=\"wp-block-paragraph\">c\u4ee3\u7801\u9a8c\u8bc1\u4e86:<br>type\u5143\u7c7b\u7684<strong>call<\/strong>\u65b9\u6cd5\u5e95\u5c42\u8c03\u7528\u7684<strong>new<\/strong>\u65b9\u6cd5\u5c31\u662fobject\u7c7b\u7684<strong>new<\/strong>\u65b9\u6cd5\u3002<\/p>\n<p class=\"wp-block-paragraph\">\u4ee3\u7801\u9a8c\u8bc1:<\/p>\n<pre class=\"wp-block-code\"><code>class BaseRobot(object):\n    def __init__(self, name):\n        self.name = name\n\n# --- \ud83e\uddea \u7ec8\u6781\u5bf9\u6bd4\u5b9e\u9a8c\u5f00\u59cb ---\nprint(&quot;--- \ud83c\udfc1 \u4e24\u79cd\u4e0d\u540c\u5199\u6cd5\u4e0b\uff0c\u5e95\u5c42 __new__ \u7684\u7269\u7406\u5185\u5b58\u5730\u5740\u5927\u5bf9\u649e ---&quot;)\n\n# 1. \u7528\u666e\u901a\u8bed\u6cd5\u7cd6\uff08\u65b9\u6cd5 A\uff09\u634f\u51fa\u7b2c\u4e00\u4e2a\u673a\u5668\u4eba\nbot_from_syntax = BaseRobot(&quot;Wall-E&quot;)\n\n# 2. \u7528\u5927\u603b\u7ba1\u8d34\u8138\u8c03\u7528\uff08\u65b9\u6cd5 B\uff09\u634f\u51fa\u7b2c\u4e8c\u4e2a\u673a\u5668\u4eba\nbot_from_god = type.__call__(BaseRobot, &quot;Eve&quot;)\n\nprint(&quot;\\n====== \ud83d\udcca \u7269\u7406\u5185\u5b58\u6570\u636e\u50cf\u7d20\u7ea7\u73b0\u573a\u5bf9\u9f50 ======&quot;)\n\n# \u63d0\u53d6\u4e24\u79cd\u5199\u6cd5\u80cc\u540e\uff0c\u5927\u603b\u7ba1\u5728\u5185\u90e8\u901a\u8fc7\u70b9\u53f7\u67e5\u627e\u63ea\u51fa\u6765\u7684 __new__ \u5b9e\u4f53\nnew_from_syntax = BaseRobot.__new__\nnew_from_god = BaseRobot.__new__\n\nprint(f&quot;1. \u666e\u901a BaseRobot() \u5199\u6cd5\u80cc\u540e\u5de5\u4f5c\u7684 __new__ \u5b9e\u4f53:\\n   {new_from_syntax}&quot;)\nprint(f&quot;2. \u76f4\u63a5\u8c03 type.__call__() \u5199\u6cd5\u80cc\u540e\u5de5\u4f5c\u7684 __new__ \u5b9e\u4f53:\\n   {new_from_god}&quot;)\n\nprint(&quot;\\n------------------------------------------------&quot;)\n\n# \u7ec8\u6781\u5224\u5b9a\u4e00\uff1a\u4e24\u79cd\u5199\u6cd5\u6293\u51fa\u6765\u7684 __new__ \u51fd\u6570\u5728\u5185\u5b58\u4e2d\u662f\u540c\u4e00\u4e2a\u7edd\u5bf9\u7269\u7406\u5b9e\u4f53\u5417\uff1f\nis_same_worker = (new_from_syntax is new_from_god)\nprint(f&quot;   \u2794 \u7ed3\u8bba\u4e00\u3010\u7edd\u5bf9\u94c1\u8bc1\u3011\uff1a\u4e24\u79cd\u5199\u6cd5\u80cc\u540e\u7684 __new__ is \u540c\u4e00\u4e2a\u5417? -&gt; {is_same_worker} \u2705&quot;)\n\n# \u7ec8\u6781\u5224\u5b9a\u4e8c\uff1a\u5b83\u662f\u4e0d\u662f\u5c31\u662f\u8001\u7956\u5b97 object.__new__\uff1f\nprint(f&quot;   \u2794 \u7ed3\u8bba\u4e8c\u3010\u5f7b\u5e95\u9501\u6b7b\u3011\uff1a\u5b83\u4eec\u548c object.__new__ is \u540c\u4e00\u4e2a\u5417?     -&gt; {new_from_syntax is object.__new__} \u2705&quot;)\n\n# \u9a8c\u8bc1\u4e09\uff1a\u4e24\u4e2a\u72ec\u7acb\u7684\u5b9e\u4f8b\uff0c\u7a7a\u95f4\u4f9d\u7136\u662f\u5404\u81ea\u65b0\u5f00\u8f9f\u7684\nprint(f&quot;   \u2794 \u7ed3\u8bba\u4e09\uff1a\u4e24\u4e2a\u5b9e\u4f8b\u4f9d\u7136\u662f\u72ec\u7acb\u7684\u7269\u7406\u5b9e\u4f53\u5417?             -&gt; {bot_from_syntax is not bot_from_god} \u2705&quot;)<\/code><\/pre>\n<p class=\"wp-block-paragraph\">\u8fd0\u884c\u7ed3\u679c<\/p>\n<pre class=\"wp-block-code\"><code>--- \ud83c\udfc1 \u4e24\u79cd\u4e0d\u540c\u5199\u6cd5\u4e0b\uff0c\u5e95\u5c42 __new__ \u7684\u7269\u7406\u5185\u5b58\u5730\u5740\u5927\u5bf9\u649e ---\n\n====== \ud83d\udcca \u7269\u7406\u5185\u5b58\u6570\u636e\u50cf\u7d20\u7ea7\u73b0\u573a\u5bf9\u9f50 ======\n1. \u666e\u901a BaseRobot() \u5199\u6cd5\u80cc\u540e\u5de5\u4f5c\u7684 __new__ \u5b9e\u4f53:\n   &lt;built-in method __new__ of type object at 0x101323d68&gt;\n2. \u76f4\u63a5\u8c03 type.__call__() \u5199\u6cd5\u80cc\u540e\u5de5\u4f5c\u7684 __new__ \u5b9e\u4f53:\n   &lt;built-in method __new__ of type object at 0x101323d68&gt;\n\n------------------------------------------------\n   \u2794 \u7ed3\u8bba\u4e00\u3010\u7edd\u5bf9\u94c1\u8bc1\u3011\uff1a\u4e24\u79cd\u5199\u6cd5\u80cc\u540e\u7684 __new__ is \u540c\u4e00\u4e2a\u5417? -&gt; True \u2705\n   \u2794 \u7ed3\u8bba\u4e8c\u3010\u5f7b\u5e95\u9501\u6b7b\u3011\uff1a\u5b83\u4eec\u548c object.__new__ is \u540c\u4e00\u4e2a\u5417?     -&gt; True \u2705\n   \u2794 \u7ed3\u8bba\u4e09\uff1a\u4e24\u4e2a\u5b9e\u4f8b\u4f9d\u7136\u662f\u72ec\u7acb\u7684\u7269\u7406\u5b9e\u4f53\u5417?             -&gt; True \u2705<\/code><\/pre>\n<p class=\"wp-block-paragraph\">\u603b\u7ed3:<\/p>\n<ul class=\"wp-block-list\">\n<li>\u6240\u6709\u666e\u901a\u7c7b\u90fd\u662f\u6709type\u5143\u7c7b\u521b\u5efa<\/li>\n\n<li>\u6240\u6709\u666e\u901a\u7c7b\u7684\u5b9e\u4f8b\u5316\u90fd\u9700\u8981\u7ecf\u8fc7type\u5143\u7c7b\u7684<strong>call<\/strong>\u65b9\u6cd5\u8c03\u7528object\u7c7b\u7684<strong>new<\/strong>\u65b9\u6cd5\u521b\u5efa<\/li>\n<\/ul>\n<p class=\"wp-block-paragraph\">\u8fd9\u91cc\u53c8\u6709\u4e00\u4e2apython\u5965\u79d8,\u5f53\u6211\u4eec\u70b9\u51fbtype\u6e90\u7801\u65f6,\u53d1\u73b0type\u7ee7\u627fobject\u7c7b,\u800cprint(type(object))\u6253\u5370\u7684\u662ftype\u7c7b,\u8fd9\u5c31\u5f62\u6210\u7c7b\u4f3c&#8221;\u9e21\u751f\u86cb,\u86cb\u751f\u9e21\u7684\u5faa\u73af&#8221;,\u5230\u5e95\u8c01\u751f\u8c01\u5462\uff1f\u8fd9\u4e2a\u5f97\u770bcpython\u6e90\u7801\u4e86,\u6211\u4eec\u5c31\u4e0d\u5728\u8fd9\u91cc\u7ea0\u7f20\u4e86,\u53cd\u6b63\u8fd9\u4e2a\u8bbe\u5b9a\u9020\u5c31\u4e86python\u8bed\u8a00\u7684\u52a8\u6001\u6027,\u4fbf\u6377\u6027\u3002<\/p>\n<h5 class=\"wp-block-heading\">\u5143\u7c7b\u7684\u5e94\u7528\u4e3e\u4f8b<\/h5>\n<ul class=\"wp-block-list\">\n<li>\u573a\u666f\u4e00\uff1aORM \u6846\u67b6\u9ed1\u9b54\u6cd5\uff08\u52a8\u6001\u5c06\u7c7b\u5c5e\u6027\u6620\u5c04\u4e3a\u6570\u636e\u5e93\u8868\uff09<\/li>\n<\/ul>\n<p class=\"wp-block-paragraph\">\u5e94\u7528\u80cc\u666f\uff1a\u6211\u4eec\u5728\u7528 Django \u6216 SQLAlchemy \u65f6\uff0c\u53ea\u9700\u8981\u58f0\u660e name = CharField()\uff0c\u6846\u67b6\u5c31\u80fd\u81ea\u52a8\u628a\u8fd9\u4e2a\u7c7b\u53d8\u6210\u6570\u636e\u5e93\u91cc\u7684\u4e00\u5f20\u8868\u3002\u8fd9\u80cc\u540e\u7684\u59cb\u4f5c\u4fd1\u8005\u5c31\u662f\u5143\u7c7b\u3002<\/p>\n<p class=\"wp-block-paragraph\">\u793a\u4f8b\u4ee3\u7801:<\/p>\n<pre class=\"wp-block-code\"><code># 1. \u6a21\u62df ORM \u91cc\u7684\u5b57\u6bb5\u57fa\u7c7b\nclass Field:\n    pass\n\nclass CharField(Field):\n    pass\n\nclass IntegerField(Field):\n    pass\n\n# 2. \u6838\u5fc3\u9ed1\u9b54\u6cd5\uff1aORM \u5143\u7c7b\nclass ORMMetaclass(type):\n    def __new__(mcs, name, bases, attrs):\n        # \u6392\u9664\u5bf9 Model \u57fa\u7c7b\u672c\u8eab\u7684\u62e6\u622a\n        if name == &quot;Model&quot;:\n            return super().__new__(mcs, name, bases, attrs)\n\n        print(f&quot;\ud83d\udd75\ufe0f&zwj;\u2642\ufe0f [ORM \u68c0\u9605] \u53d1\u73b0\u6570\u636e\u5e93\u6a21\u578b\u7c7b '{name}' \u6b63\u5728\u521b\u5efa\uff0c\u5f00\u59cb\u626b\u63cf\u5b57\u6bb5...&quot;)\n\n        # \u51c6\u5907\u4e00\u4e2a\u72ec\u7acb\u7684\u6c38\u4e45\u8868\u5b57\u6bb5\u4ed3\u5e93\n        fields_map = {}\n\n        # \u5173\u952e\u4e00\u77ac\u95f4\uff1a\u5728 attrs \u8fd8\u662f\u7eaf\u751f\u5b57\u5178\u7684\u65f6\u5019\uff0c\u628a\u5c5e\u4e8e Field \u57fa\u56e0\u7684\u5c5e\u6027\u5168\u90e8\u63ea\u51fa\u6765\n        # \u8fd9\u6837\u53ef\u4ee5\u9632\u6b62\u7528\u6237\u5728\u4e1a\u52a1\u4ee3\u7801\u91cc\u4e0d\u5c0f\u5fc3\u6539\u6389\u8fd9\u4e9b\u6838\u5fc3\u914d\u7f6e\n        for key, value in list(attrs.items()):\n            if isinstance(value, Field):\n                fields_map[key] = value\n                del attrs[key] # \u4ece\u539f\u672c\u7684\u7c7b\u5b57\u5178\u4e2d\u62bd\u79bb\uff0c\u5f7b\u5e95\u4fdd\u62a4\u8d77\u6765\n\n        # \u6838\u5fc3\u6c38\u4e45\u6ce8\u518c\uff1a\u628a\u626b\u63cf\u51fa\u6765\u7684\u5b57\u6bb5\u5b57\u5178\uff0c\u4ee5\u53ca\u6a21\u62df\u7684\u6570\u636e\u5e93\u8868\u540d\uff0c\u5f3a\u884c\u710a\u6b7b\u5728\u7c7b\u7684\u57fa\u56e0\u91cc\uff01\n        attrs[&quot;_fields&quot;] = fields_map\n        attrs[&quot;_table_name&quot;] = name.lower() + &quot;_table&quot;\n\n        print(f&quot;\ud83d\ude80 [ORM \u6c38\u4e45\u6ce8\u518c] \u6210\u529f\u4e3a\u7c7b '{name}' \u7ed1\u5b9a\u4e86\u8868\u540d '{attrs['_table_name']}' \u5e76\u56fa\u5316\u4e86\u5b57\u6bb5\u4ed3\u5e93\uff01&quot;)\n        return super().__new__(mcs, name, bases, attrs)\n\n# 3. \u63d0\u4f9b\u7ed9\u7528\u6237\u4f7f\u7528\u7684 Model \u57fa\u7c7b\nclass Model(metaclass=ORMMetaclass):\n    pass\n\n# ---- \u4e1a\u52a1\u4ee3\u7801\uff08\u7528\u6237\u7528\u8d77\u6765\u6781\u5ea6\u4e1d\u6ed1\uff09 ----\nclass User(Model):\n    username = CharField()\n    age = IntegerField()\n\n# ---- \u9a8c\u8bc1\u95ed\u73af ----\nprint(&quot;\\n--- \ud83c\udfc1 \u73b0\u573a\u50cf\u7d20\u7ea7\u9a8c\u8bc1 ORM \u9ed1\u9b54\u6cd5 ---&quot;)\nprint(f&quot;1. User \u7c7b\u7ed1\u5b9a\u7684\u771f\u5b9e\u6570\u636e\u5e93\u8868\u540d\u662f -&gt; {User._table_name}&quot;)\nprint(f&quot;2. User \u7c7b\u7684\u539f\u59cb\u5c5e\u6027\u5b57\u5178\u91cc\u8fd8\u6709 username \u5417? -&gt; {'username' in User.__dict__}&quot;)\nprint(f&quot;3. User \u6c38\u4e45\u56fa\u5316\u7684\u6570\u636e\u5e93\u5b57\u6bb5\u4ed3\u5e93\u5185\u5bb9 -&gt; {list(User._fields.keys())}&quot;)<\/code><\/pre>\n<p class=\"wp-block-paragraph\">\u8fd0\u884c\u7ed3\u679c<\/p>\n<pre class=\"wp-block-code\"><code>\ud83d\udd75\ufe0f&zwj;\u2642\ufe0f [ORM \u68c0\u9605] \u53d1\u73b0\u6570\u636e\u5e93\u6a21\u578b\u7c7b 'User' \u6b63\u5728\u521b\u5efa\uff0c\u5f00\u59cb\u626b\u63cf\u5b57\u6bb5...\n\ud83d\ude80 [ORM \u6c38\u4e45\u6ce8\u518c] \u6210\u529f\u4e3a\u7c7b 'User' \u7ed1\u5b9a\u4e86\u8868\u540d 'user_table' \u5e76\u56fa\u5316\u4e86\u5b57\u6bb5\u4ed3\u5e93\uff01\n\n--- \ud83c\udfc1 \u73b0\u573a\u50cf\u7d20\u7ea7\u9a8c\u8bc1 ORM \u9ed1\u9b54\u6cd5 ---\n1. User \u7c7b\u7ed1\u5b9a\u7684\u771f\u5b9e\u6570\u636e\u5e93\u8868\u540d\u662f -&gt; user_table\n2. User \u7c7b\u7684\u539f\u59cb\u5c5e\u6027\u5b57\u5178\u91cc\u8fd8\u6709 username \u5417? -&gt; False\n3. User \u6c38\u4e45\u56fa\u5316\u7684\u6570\u636e\u5e93\u5b57\u6bb5\u4ed3\u5e93\u5185\u5bb9 -&gt; ['username', 'age']<\/code><\/pre>\n<ul class=\"wp-block-list\">\n<li>\u573a\u666f\u4e8c\uff1aAPI \u63a5\u53e3\u81ea\u52a8\u5316\u6846\u67b6\uff08\u52a8\u6001\u62e6\u622a\u5e76\u5f3a\u5236\u6821\u9a8c\u547d\u540d\u89c4\u8303\uff09<\/li>\n<\/ul>\n<p class=\"wp-block-paragraph\">\u5e94\u7528\u80cc\u666f\uff1a\u5728\u5927\u5382\u7684\u5927\u578b\u5fae\u670d\u52a1\u67b6\u6784\u4e2d\uff0c\u4e3a\u4e86\u9632\u6b62\u51e0\u767e\u4e2a\u67b6\u6784\u5e08\u4e71\u5199 API \u540d\u5b57\uff0c\u901a\u5e38\u4f1a\u7528\u5143\u7c7b\u5728\u4ee3\u7801\u52a0\u8f7d\u671f\u5f3a\u884c\u68c0\u9605\u6240\u6709\u7c7b\u7684\u65b9\u6cd5\u540d\u3002\u5982\u679c\u53d1\u73b0\u8c01\u6ca1\u6709\u9075\u5b88\u9a7c\u5cf0\u547d\u540d\u6cd5\uff08CamelCase\uff09\u6216\u4e0b\u5212\u7ebf\u547d\u540d\u6cd5\uff08snake_case\uff09\uff0c\u76f4\u63a5\u62d2\u7edd\u8ba9\u8fd9\u4e2a\u7c7b\u8bde\u751f\uff0c\u5c06 Bug \u5f7b\u5e95\u6740\u6b7b\u5728\u7f16\u8bd1\u671f\uff01<\/p>\n<p class=\"wp-block-paragraph\">\u793a\u4f8b\u4ee3\u7801:<\/p>\n<pre class=\"wp-block-code\"><code>class APIComplianceMeta(type):\n    def __new__(mcs, name, bases, attrs):\n        # \u6392\u9664\u57fa\u7c7b\n        if name == &quot;BaseAPI&quot;:\n            return super().__new__(mcs, name, bases, attrs)\n\n        print(f&quot;\ud83d\udd0d [\u5927\u5382\u5408\u89c4\u6027\u5ba1\u67e5] \u6b63\u5728\u5168\u7ebf\u626b\u63cf API \u7c7b '{name}' \u7684\u547d\u540d\u89c4\u8303...&quot;)\n\n        # \u904d\u5386\u6240\u6709\u4eba\u5199\u7684\u65b9\u6cd5\u539f\u6750\u6599\n        for key, value in attrs.items():\n            # \u6392\u9664\u7cfb\u7edf\u5185\u7f6e\u7684\u53cc\u4e0b\u5212\u7ebf\u65b9\u6cd5\uff08\u9b54\u6cd5\u65b9\u6cd5\uff09\n            if not key.startswith(&quot;__&quot;):\n                # \u5f3a\u884c\u89c4\u5b9a\uff1a\u6240\u6709\u7684 API \u65b9\u6cd5\u5fc5\u987b\u4ee5 'api_' \u5f00\u5934\n                if not key.startswith(&quot;api_&quot;):\n                    # \ud83d\udca5 \u964d\u7ef4\u6253\u51fb\uff1a\u4e0d\u629b\u51fa\u8fd0\u884c\u671f\u5f02\u5e38\uff0c\u76f4\u63a5\u5728\u4ee3\u7801\u52a0\u8f7d\u52a0\u8f7d\u671f\u629b\u51fa\u786c\u6838\u5b89\u5168\u89c4\u8303\u5f02\u5e38\uff01\n                    # \u8ba9\u4f60\u8fd9\u4e2a\u7c7b\u8fde\u5728\u5185\u5b58\u91cc\u8bde\u751f\u7684\u673a\u4f1a\u90fd\u6ca1\u6709\uff01\n                    raise NameError(\n                        f&quot;\\n\u274c [\u62d2\u7edd\u8bde\u751f\u5b89\u5168\u8b66\u544a]\uff1a\u7c7b '{name}' \u4e2d\u7684\u65b9\u6cd5 '{key}' \u4e25\u91cd\u8fdd\u53cd\u4e86\u5927\u5382 API \u547d\u540d\u89c4\u8303\uff01\\n&quot;\n                        f&quot;\ud83d\udc49 \u5fc5\u987b\u4ee5 'api_' \u4f5c\u4e3a\u524d\u7f00\uff01&quot;\n                    )\n\n        print(f&quot;\u2705 [\u5408\u89c4\u6027\u901a\u8fc7] \u7c7b '{name}' 100% \u7b26\u5408\u5b89\u5168\u89c4\u8303\uff0c\u51c6\u4e88\u5f00\u8f9f\u5185\u5b58\u521b\u5efa\uff01&quot;)\n        return super().__new__(mcs, name, bases, attrs)\n\nclass BaseAPI(metaclass=APIComplianceMeta):\n    pass\n\n# ---- \u4e1a\u52a1\u4ee3\u7801 ----\ntry:\n    print(&quot;--- \ud83e\uddea \u573a\u666f A\uff1a\u597d\u5458\u5de5\u63d0\u4ea4\u4e86\u5408\u89c4\u7684\u4ee3\u7801 ---&quot;)\n    class OrderAPI(BaseAPI):\n        def api_get_order(self): pass\n        def api_create_order(self): pass\n\n    print(&quot;\\n--- \ud83e\uddea \u573a\u666f B\uff1a\u7c97\u5fc3\u7684\u5458\u5de5\u63d0\u4ea4\u4e86\u8fdd\u89c4\u7684\u4ee3\u7801 ---&quot;)\n    class PaymentAPI(BaseAPI):\n        def api_pay_verify(self): pass\n        def checkout_payment(self): pass # \ud83d\udca5 \u6545\u610f\u4e0d\u52a0 api_ \u524d\u7f00\uff0c\u8fdd\u53cd\u5927\u5382\u519b\u89c4\n\nexcept NameError as e:\n    print(e)<\/code><\/pre>\n<p class=\"wp-block-paragraph\">\u8fd0\u884c\u7ed3\u679c<\/p>\n<pre class=\"wp-block-code\"><code>--- \ud83e\uddea \u573a\u666f A\uff1a\u597d\u5458\u5de5\u63d0\u4ea4\u4e86\u5408\u89c4\u7684\u4ee3\u7801 ---\n\ud83d\udd0d [\u5927\u5382\u5408\u89c4\u6027\u5ba1\u67e5] \u6b63\u5728\u5168\u7ebf\u626b\u63cf API \u7c7b 'OrderAPI' \u7684\u547d\u540d\u89c4\u8303...\n\u2705 [\u5408\u89c4\u6027\u901a\u8fc7] \u7c7b 'OrderAPI' 100% \u7b26\u5408\u5b89\u5168\u89c4\u8303\uff0c\u51c6\u4e88\u5f00\u8f9f\u5185\u5b58\u521b\u5efa\uff01\n\n--- \ud83e\uddea \u573a\u666f B\uff1a\u7c97\u5fc3\u7684\u5458\u5de5\u63d0\u4ea4\u4e86\u8fdd\u89c4\u7684\u4ee3\u7801 ---\n\ud83d\udd0d [\u5927\u5382\u5408\u89c4\u6027\u5ba1\u67e5] \u6b63\u5728\u5168\u7ebf\u626b\u63cf API \u7c7b 'PaymentAPI' \u7684\u547d\u540d\u89c4\u8303...\n\n\u274c [\u62d2\u7edd\u8bde\u751f\u5b89\u5168\u8b66\u544a]\uff1a\u7c7b 'PaymentAPI' \u4e2d\u7684\u65b9\u6cd5 'checkout_payment' \u4e25\u91cd\u8fdd\u53cd\u4e86\u5927\u5382 API \u547d\u540d\u89c4\u8303\uff01\n\ud83d\udc49 \u5fc5\u987b\u4ee5 'api_' \u4f5c\u4e3a\u524d\u7f00\uff01<\/code><\/pre>\n<ul class=\"wp-block-list\">\n<li>\u573a\u666f\u4e09\uff1a\u57fa\u7840\u67b6\u6784\u7ec4\u4ef6\u6ce8\u518c\u5668\uff08\u5168\u81ea\u52a8\u5355\u4f8b\u6a21\u5f0f \/ \u63d2\u4ef6\u5de5\u5382\uff09<\/li>\n<\/ul>\n<p class=\"wp-block-paragraph\">\u5e94\u7528\u80cc\u666f\uff1a\u5728\u7f16\u5199\u4e2d\u95f4\u4ef6\u3001\u6e38\u620f\u5f15\u64ce\u7684\u52a8\u6001\u63d2\u4ef6\u7cfb\u7edf\u3001\u6216\u8005\u6570\u636e\u5e93\u8fde\u63a5\u6c60\u65f6\uff0c\u6211\u4eec\u5e0c\u671b\u51e1\u662f\u7ee7\u627f\u4e86\u67d0\u4e2a\u57fa\u7c7b\u7684\u7ec4\u4ef6\uff0c\u5728\u8bde\u751f\u7684\u4e00\u77ac\u95f4\uff0c\u81ea\u52a8\u628a\u81ea\u5df1\u6ce8\u518c\u8fdb\u4e2d\u592e\u63a7\u5236\u5927\u672c\u8425\u91cc\uff0c\u4e0d\u9700\u8981\u4eba\u5de5\u53bb\u5199\u5404\u79cd register() \u51fd\u6570\u3002<\/p>\n<p class=\"wp-block-paragraph\">\u793a\u4f8b\u4ee3\u7801:<\/p>\n<pre class=\"wp-block-code\"><code># \u4e2d\u592e\u63a7\u5236\u5927\u672c\u8425\uff08\u5168\u5c40\u7ec4\u4ef6\u6ce8\u518c\u4e2d\u5fc3\uff09\nGLOBAL_PLUGIN_REGISTRY = {}\n\nclass PluginRegisterMeta(type):\n    def __new__(mcs, name, bases, attrs):\n        # \u901a\u8fc7 type.__new__ \u628a\u7c7b\u5bf9\u8c61\u5728\u795e\u660e\u5c42\u7ed9\u771f\u6b63\u634f\u51fa\u6765\n        cls_object = super().__new__(mcs, name, bases, attrs)\n\n        # \u6392\u9664\u57fa\u7c7b\u672c\u8eab\n        if name != &quot;BasePlugin&quot;:\n            # \ud83d\udca5 \u9ad8\u80fd\u4e00\u77ac\u95f4\uff1a\u7c7b\u5bf9\u8c61\u521a\u5728\u5185\u5b58\u91cc\u843d\u5730\uff0c\u5143\u7c7b\u7acb\u523b\u628a\u5b83\u63ea\u4f4f\uff0c\n            # \u81ea\u52a8\u628a\u5b83\u7684\u7c7b\u540d\u4f5c\u4e3a Key\uff0c\u5b83\u7684\u5185\u5b58\u5b9e\u4f53\u4f5c\u4e3a Value\uff0c\u6c38\u4e45\u6302\u8f7d\u8fdb\u5168\u5c40\u5927\u672c\u8425\uff01\n            GLOBAL_PLUGIN_REGISTRY[name] = cls_object\n            print(f&quot;\ud83d\udce6 [\u4e2d\u592e\u5927\u672c\u8425\u8054\u52a8] \u63d2\u4ef6\u7c7b '{name}' \u8bde\u751f\u5373\u5b8c\u6210\u5168\u81ea\u52a8\u6ce8\u518c\uff01&quot;)\n\n        return cls_object\n\nclass BasePlugin(metaclass=PluginRegisterMeta):\n    pass\n\n# ---- \u4e1a\u52a1\u4ee3\u7801\uff08\u63d2\u4ef6\u5f00\u53d1\u8005\u53ea\u9700\u8981\u8001\u8001\u5b9e\u5b9e\u5199\u81ea\u5df1\u7684\u4e1a\u52a1\uff0c\u6839\u672c\u4e0d\u9700\u8981\u61c2\u4e2d\u95f4\u4ef6\u7684\u6ce8\u518c\u903b\u8f91\uff09 ----\nclass MySQLDriverPlugin(BasePlugin):\n    pass\n\nclass RedisCachePlugin(BasePlugin):\n    pass\n\n# ---- \u9a8c\u8bc1\u95ed\u73af ----\nprint(&quot;\\n--- \ud83c\udfc1 \u73b0\u573a\u50cf\u7d20\u7ea7\u9a8c\u8bc1\u4e2d\u592e\u5927\u672c\u8425\u81ea\u52a8\u6ce8\u518c\u7ed3\u679c ---&quot;)\nprint(f&quot;\u76ee\u524d\u4e2d\u592e\u5927\u672c\u8425\u91cc\u5df2\u7ecf\u9759\u9759\u8eba\u7740\u7684\u63d2\u4ef6\u5b9e\u4f53\u6709:\\n{GLOBAL_PLUGIN_REGISTRY}&quot;)<\/code><\/pre>\n<p class=\"wp-block-paragraph\">\u8fd0\u884c\u7ed3\u679c<\/p>\n<pre class=\"wp-block-code\"><code>\ud83d\udce6 [\u4e2d\u592e\u5927\u672c\u8425\u8054\u52a8] \u63d2\u4ef6\u7c7b 'MySQLDriverPlugin' \u8bde\u751f\u5373\u5b8c\u6210\u5168\u81ea\u52a8\u6ce8\u518c\uff01\n\ud83d\udce6 [\u4e2d\u592e\u5927\u672c\u8425\u8054\u52a8] \u63d2\u4ef6\u7c7b 'RedisCachePlugin' \u8bde\u751f\u5373\u5b8c\u6210\u5168\u81ea\u52a8\u6ce8\u518c\uff01\n\n--- \ud83c\udfc1 \u73b0\u573a\u50cf\u7d20\u7ea7\u9a8c\u8bc1\u4e2d\u592e\u5927\u672c\u8425\u81ea\u52a8\u6ce8\u518c\u7ed3\u679c ---\n\u76ee\u524d\u4e2d\u592e\u5927\u672c\u8425\u91cc\u5df2\u7ecf\u9759\u9759\u8eba\u7740\u7684\u63d2\u4ef6\u5b9e\u4f53\u6709:\n{'MySQLDriverPlugin': &lt;class '__main__.MySQLDriverPlugin'&gt;, 'RedisCachePlugin': &lt;class '__main__.RedisCachePlugin'&gt;}<\/code><\/pre>\n<h3 class=\"wp-block-heading\">9.\u5185\u5b58\u6a21\u578b\u4e0e\u5783\u573e\u56de\u6536<\/h3>\n<p class=\"wp-block-paragraph\">Python \u7684\u5185\u5b58\u6a21\u578b\u4e3b\u8981\u7531 \u200cCPython \u89e3\u91ca\u5668\u81ea\u52a8\u7ba1\u7406\uff0c\u5176\u6838\u5fc3\u8bbe\u8ba1\u76ee\u6807\u662f\u9ad8\u6548\u5229\u7528\u5185\u5b58\u5e76\u51cf\u8f7b\u5f00\u53d1\u8005\u7684\u8d1f\u62c5\u3002\u4e0e C\/C++ \u9700\u8981\u624b\u52a8\u7ba1\u7406\u5185\u5b58\u4e0d\u540c\uff0cPython \u901a\u8fc7 <strong><em>\u5f15\u7528\u8ba1\u6570<\/em><\/strong>\u3001<strong><em>\u5783\u573e\u56de\u6536<\/em><\/strong>\u548c <strong><em>\u5185\u5b58\u6c60\u673a\u5236<\/em><\/strong>\u4e09\u5927\u652f\u67f1\u6765\u534f\u540c\u5de5\u4f5c\u3002<\/p>\n<h4 class=\"wp-block-heading\">\u6838\u5fc3\u673a\u5236\uff1a\u5982\u4f55\u8ffd\u8e2a\u548c\u7ba1\u7406\u5bf9\u8c61\uff1f<\/h4>\n<h5 class=\"wp-block-heading\">\u5f15\u7528\u8ba1\u6570\uff08Reference Counting\uff09\u2014\u2014 \u7b2c\u4e00\u9053\u9632\u7ebf<\/h5>\n<p class=\"wp-block-paragraph\">\u8fd9\u662f Python \u5185\u5b58\u7ba1\u7406\u6700\u57fa\u7840\u4e14\u6700\u9ad8\u6548\u7684\u673a\u5236\u3002<\/p>\n<ul class=\"wp-block-list\">\n<li>\u539f\u7406<\/li>\n\n<li>\u6bcf\u4e2a Python \u5bf9\u8c61\u5185\u90e8\u90fd\u6709\u4e00\u4e2a\u8ba1\u6570\u5668\uff0c\u8bb0\u5f55\u6709\u591a\u5c11\u4e2a\u53d8\u91cf\u6216\u5f15\u7528\u6307\u5411\u5b83\u3002<\/li>\n\n<li>\u5f53\u521b\u5efa\u4e00\u4e2a\u65b0\u5f15\u7528\u65f6\uff08\u5982 a = obj\uff09\uff0c\u8ba1\u6570\u5668 +1\u3002<\/li>\n\n<li>\u5f53\u5f15\u7528\u88ab\u5220\u9664\u6216\u91cd\u65b0\u8d4b\u503c\u65f6\uff08\u5982 del a \u6216 a = 1\uff09\uff0c\u8ba1\u6570\u5668 -1\u3002<\/li>\n\n<li>\u56de\u6536\u65f6\u673a\uff1a\u5f53\u8ba1\u6570\u5668\u5f52\u96f6\u65f6\uff0c\u8bf4\u660e\u8be5\u5bf9\u8c61\u4e0d\u518d\u88ab\u4efb\u4f55\u5730\u65b9\u4f7f\u7528\uff0c\u89e3\u91ca\u5668\u4f1a\u7acb\u5373\u91ca\u653e\u5176\u5360\u7528\u7684\u5185\u5b58\u3002<\/li>\n\n<li>\u4f18\u70b9\uff1a\u5b9e\u65f6\u6027\u9ad8\uff0c\u5185\u5b58\u4e00\u65e6\u65e0\u7528\u5373\u523b\u91ca\u653e\u3002<\/li>\n\n<li>\u7f3a\u70b9\uff1a\u65e0\u6cd5\u5904\u7406 \u200c\u5faa\u73af\u5f15\u7528\u200c\uff08Circular Reference\uff09\u3002\u4f8b\u5982\uff0c\u5bf9\u8c61 A \u5f15\u7528\u5bf9\u8c61 B\uff0c\u5bf9\u8c61 B \u53c8\u5f15\u7528\u5bf9\u8c61 A\uff0c\u5373\u4f7f\u5916\u90e8\u6ca1\u6709\u5f15\u7528\u5b83\u4eec\uff0c\u5b83\u4eec\u7684\u8ba1\u6570\u5668\u4e5f\u6c38\u8fdc\u4e0d\u4e3a 0\uff0c\u5bfc\u81f4\u5185\u5b58\u6cc4\u6f0f\u3002<\/li>\n<\/ul>\n<p class=\"wp-block-paragraph\">\u793a\u4f8b\u4ee3\u7801:<\/p>\n<pre class=\"wp-block-code\"><code>import gc\nimport sys\n\nclass Node:\n    def __init__(self, name):\n        self.name = name\n        self.partner = None\n\n    def __del__(self):\n        print(f&quot;\ud83d\uddd1\ufe0f \u5bf9\u8c61 {self.name} \u88ab\u9500\u6bc1&quot;)\n\n# 1. \u521b\u5efa\u5faa\u73af\u5f15\u7528\na = Node(&quot;A&quot;)\nb = Node(&quot;B&quot;)\na.partner = b\nb.partner = a\n\nprint(f&quot;\u521d\u59cb\u5f15\u7528\u8ba1\u6570 a: {sys.getrefcount(a)}&quot;) # \u901a\u5e38\u4e3a 3 (a, b.partner, getrefcount\u53c2\u6570)\n\n# 2. \u5220\u9664\u5916\u90e8\u5f15\u7528\ndel a\ndel b\n\n# \u6b64\u65f6 a \u548c b \u7684\u5f15\u7528\u8ba1\u6570\u4e0d\u4e3a 0\uff08\u56e0\u4e3a\u4e92\u76f8\u5f15\u7528\uff09\uff0c\u4f46\u5df2\u4e0d\u53ef\u8fbe\nprint(&quot;\u23f3 \u89e6\u53d1\u5783\u573e\u56de\u6536...&quot;)\ngc.collect() # \u624b\u52a8\u89e6\u53d1 GC\uff0c\u5185\u90e8\u6267\u884c\u6807\u8bb0-\u6e05\u9664<\/code><\/pre>\n<p class=\"wp-block-paragraph\">\u8fd0\u884c\u7ed3\u679c<\/p>\n<pre class=\"wp-block-code\"><code>\u521d\u59cb\u5f15\u7528\u8ba1\u6570 a: 3\n\u23f3 \u89e6\u53d1\u5783\u573e\u56de\u6536...\n\ud83d\uddd1\ufe0f \u5bf9\u8c61 A \u88ab\u9500\u6bc1\n\ud83d\uddd1\ufe0f \u5bf9\u8c61 B \u88ab\u9500\u6bc1<\/code><\/pre>\n<h5 class=\"wp-block-heading\">\u5783\u573e\u56de\u6536\uff08Garbage Collection, GC\uff09\u2014\u2014 \u89e3\u51b3\u5faa\u73af\u5f15\u7528<\/h5>\n<p class=\"wp-block-paragraph\">\u4e3a\u4e86\u89e3\u51b3\u5f15\u7528\u8ba1\u6570\u7684\u77ed\u677f\uff0cPython \u5f15\u5165\u4e86\u6807\u8bb0-\u6e05\u9664\u548c\u5206\u4ee3\u56de\u6536\u673a\u5236\u3002<\/p>\n<ul class=\"wp-block-list\">\n<li>\u6807\u8bb0-\u6e05\u9664(Mark-and-Sweep)\uff1a\n<ul class=\"wp-block-list\">\n<li>\u4e13\u95e8\u7528\u4e8e\u68c0\u6d4b\u548c\u5904\u7406\u5faa\u73af\u5f15\u7528\u3002<\/li>\n\n<li>\u8fc7\u7a0b\uff1a\u4ece\u201c\u6839\u5bf9\u8c61\u201d\uff08\u5982\u5168\u5c40\u53d8\u91cf\u3001\u6808\u4e2d\u7684\u5c40\u90e8\u53d8\u91cf\uff09\u51fa\u53d1\uff0c\u904d\u5386\u6240\u6709\u53ef\u8fbe\u5bf9\u8c61\u5e76\u8fdb\u884c\u201c\u6807\u8bb0\u201d\u3002\u904d\u5386\u7ed3\u675f\u540e\uff0c\u672a\u88ab\u6807\u8bb0\u7684\u5bf9\u8c61\u5373\u4e3a\u4e0d\u53ef\u8fbe\u7684\u201c\u5783\u573e\u201d\uff0c\u4f1a\u88ab\u6e05\u9664\u3002<\/li>\n<\/ul>\n<\/li>\n\n<li>\u5206\u4ee3\u56de\u6536(Generational Collection) \u4e3a\u4e86\u63d0\u9ad8\u6548\u7387\uff0cPython \u5c06\u5bf9\u8c61\u5206\u4e3a\u4e09\u4ee3\uff1a0\u4ee3\u30011\u4ee3\u30012\u4ee3\u3002\n<ul class=\"wp-block-list\">\n<li>\u89c4\u5219\uff1a\n<ul class=\"wp-block-list\">\n<li>\u65b0\u521b\u5efa\u7684\u5bf9\u8c61\u9ed8\u8ba4\u653e\u5728 0\u4ee3\u3002<\/li>\n\n<li>\u5982\u679c\u4e00\u6b21\u5783\u573e\u56de\u6536\u540e\u5bf9\u8c61\u4f9d\u7136\u5b58\u6d3b\uff0c\u5b83\u4f1a\u88ab\u664b\u5347\u5230\u4e0b\u4e00\u4ee3\uff080 -&gt; 1 -&gt; 2\uff09\u3002<\/li>\n\n<li>\u5b58\u6d3b\u8d8a\u4e45\u7684\u5bf9\u8c61\uff0c\u88ab\u8ba4\u4e3a\u662f\u5783\u573e\u7684\u6982\u7387\u8d8a\u4f4e\u200c\u3002<\/li>\n<\/ul>\n<\/li>\n\n<li>\u626b\u63cf\u9891\u7387\uff1a0\u4ee3\u626b\u63cf\u6700\u9891\u7e41\uff0c1\u4ee3\u6b21\u4e4b\uff0c2\u4ee3\u6700\u5c11\u3002\u8fd9\u79cd\u7b56\u7565\u5927\u5e45\u51cf\u5c11\u4e86\u5168\u91cf\u626b\u63cf\u7684\u6027\u80fd\u5f00\u9500\u3002<\/li>\n<\/ul>\n<\/li>\n<\/ul>\n<p class=\"wp-block-paragraph\">\u793a\u4f8b\u4ee3\u7801:<\/p>\n<pre class=\"wp-block-code\"><code>import gc\n\n# 1. \u8bbe\u7f6e\u6781\u5c0f\u7684\u9608\u503c\uff0c\u65b9\u4fbf\u89c2\u5bdf\ngc.set_threshold(5, 2, 2) \n\n# 2. \u521b\u5efa\u5bf9\u8c61\u5e76\u89e6\u53d1 0 \u4ee3\u56de\u6536\nobjs_gen0 = []\nfor i in range(6): # \u8d85\u8fc7\u9608\u503c 5\n    objs_gen0.append(object())\n\nprint(f&quot;0 \u4ee3\u56de\u6536\u6b21\u6570: {gc.get_count()}&quot;) \ngc.collect() # \u5f3a\u5236\u56de\u6536\uff0c\u5b58\u6d3b\u5bf9\u8c61\u664b\u5347\u5230 1 \u4ee3\n\n# 3. \u518d\u6b21\u521b\u5efa\u5bf9\u8c61\uff0c\u89c2\u5bdf 1 \u4ee3\u60c5\u51b5\nobjs_gen1 = []\nfor i in range(6):\n    objs_gen1.append(object())\n\n# \u6b64\u65f6 0 \u4ee3\u518d\u6b21\u6ee1\u5458\uff0c\u89e6\u53d1\u56de\u6536\uff0c\u4e4b\u524d\u7684 objs_gen0 \u82e5\u4ecd\u5b58\u6d3b\u5219\u7ee7\u7eed\u5728 1 \u4ee3\ngc.collect()\nprint(f&quot;\u5f53\u524d\u5404\u4ee3\u5bf9\u8c61\u6570\u91cf: {gc.get_count()}&quot;) # (0\u4ee3\u5269\u4f59, 1\u4ee3\u5269\u4f59, 2\u4ee3\u5269\u4f59)<\/code><\/pre>\n<p class=\"wp-block-paragraph\">\u8fd0\u884c\u7ed3\u679c<\/p>\n<pre class=\"wp-block-code\"><code>0 \u4ee3\u56de\u6536\u6b21\u6570: (150, 11, 0)\n\u5f53\u524d\u5404\u4ee3\u5bf9\u8c61\u6570\u91cf: (0, 0, 0)<\/code><\/pre>\n<h4 class=\"wp-block-heading\">\u5185\u5b58\u5206\u914d\u7b56\u7565\uff1a\u5982\u4f55\u9ad8\u6548\u7533\u8bf7\u5185\u5b58\uff1f<\/h4>\n<p class=\"wp-block-paragraph\">Python \u5e76\u975e\u6bcf\u6b21\u521b\u5efa\u5bf9\u8c61\u90fd\u76f4\u63a5\u5411\u64cd\u4f5c\u7cfb\u7edf\u7533\u8bf7\u5185\u5b58\uff0c\u800c\u662f\u91c7\u7528\u4e86\u5206\u5c42\u5206\u914d\u7b56\u7565\uff1a<\/p>\n<p class=\"wp-block-paragraph\">(1)\u5185\u5b58\u6c60\u673a\u5236\uff08Memory Pool \/ pymalloc\uff09<\/p>\n<ul class=\"wp-block-list\">\n<li>\u9002\u7528\u573a\u666f\uff1a\u5c0f\u4e8e 256 KB\u7684\u5c0f\u5bf9\u8c61\u3002<\/li>\n\n<li>\u539f\u7406\uff1aPython \u7ef4\u62a4\u4e86\u4e00\u4e2a\u79c1\u6709\u7684\u5185\u5b58\u6c60\u3002\u5f53\u9700\u8981\u5c0f\u5185\u5b58\u65f6\u76f4\u63a5\u4ece\u6c60\u4e2d\u5206\u914d\uff0c\u800c\u4e0d\u662f\u9891\u7e41\u8c03\u7528\u7cfb\u7edf\u7684 malloc\/free\u3002<\/li>\n\n<li>\u4f18\u52bf\uff1a<\/li>\n\n<li>\u907f\u514d\u5185\u5b58\u788e\u7247\u3002<\/li>\n\n<li>\u51cf\u5c11\u7cfb\u7edf\u8c03\u7528\u5f00\u9500\uff0c\u63d0\u5347\u5206\u914d\u901f\u5ea6\u3002<\/li>\n\n<li>\u5f53\u6c60\u4e2d\u6ca1\u6709\u7a7a\u95f2\u5757\u65f6\uff0c\u624d\u4f1a\u5411\u64cd\u4f5c\u7cfb\u7edf\u7533\u8bf7\u66f4\u5927\u7684\u5185\u5b58\u5757\uff08Arena\uff09\u3002<\/li>\n<\/ul>\n<p class=\"wp-block-paragraph\">(2)\u7cfb\u7edf\u7ea7\u5206\u914d<\/p>\n<ul class=\"wp-block-list\">\n<li>\u9002\u7528\u573a\u666f\uff1a\u5927\u4e8e 256 KB\u7684\u5927\u5bf9\u8c61\u3002<\/li>\n\n<li>\u539f\u7406\uff1a\u76f4\u63a5\u8c03\u7528\u64cd\u4f5c\u7cfb\u7edf\u7684 malloc \u6216 mmap \u8fdb\u884c\u5206\u914d\u3002<\/li>\n\n<li>\u56de\u6536\uff1a\u5927\u5bf9\u8c61\u91ca\u653e\u540e\u76f4\u63a5\u5f52\u8fd8\u7ed9\u64cd\u4f5c\u7cfb\u7edf\u3002<\/li>\n<\/ul>\n<p class=\"wp-block-paragraph\">(3)\u5c0f\u6574\u6570\u7f13\u5b58\uff08Small Integer Cache\uff09<\/p>\n<ul class=\"wp-block-list\">\n<li>\u8303\u56f4\uff1a-5 \u5230 256 \u4e4b\u95f4\u7684\u6574\u6570\u3002<\/li>\n\n<li>\u673a\u5236\uff1aPython \u5728\u542f\u52a8\u65f6\u4f1a\u9884\u5148\u521b\u5efa\u8fd9\u4e9b\u6574\u6570\u5bf9\u8c61\u5e76\u7f13\u5b58\u8d77\u6765\u3002<\/li>\n\n<li>\u6548\u679c\uff1a\u5f53\u4f60\u6267\u884c a = 100 \u548c b = 100 \u65f6\uff0ca \u548c b \u6307\u5411\u7684\u662f\u5185\u5b58\u4e2d\u540c\u4e00\u4e2a\u5bf9\u8c61\u3002\u8fd9\u65e2\u8282\u7701\u4e86\u5185\u5b58\uff0c\u53c8\u52a0\u5feb\u4e86\u5e38\u89c1\u6574\u6570\u7684\u8bbf\u95ee\u901f\u5ea6\u3002<\/li>\n<\/ul>\n<pre class=\"wp-block-code\"><code>a = 100\nb = 100\nprint(a is b)  # True (\u6307\u5411\u540c\u4e00\u5185\u5b58\u5730\u5740)\n\nc = 1000\nd = 1000\nprint(c is d)  # False (\u901a\u5e38\u6307\u5411\u4e0d\u540c\u5bf9\u8c61\uff0c\u9664\u975e\u5728\u540c\u4e00\u4ee3\u7801\u5757\u4f18\u5316\u4e0b)<\/code><\/pre>\n<h4 class=\"wp-block-heading\">Python \u5185\u5b58\u6a21\u578b\u67b6\u6784\u56fe<\/h4>\n<pre class=\"wp-block-code\"><code># Python \u5185\u5b58\u6a21\u578b\u67b6\u6784\u56fe\n# ==============================================\n\n[\u7528\u6237\u4ee3\u7801\u5c42]\n    &darr; \u6267\u884c\u521b\u5efa\u5bf9\u8c61\u64cd\u4f5c\n[Python \u5bf9\u8c61\u5c42]\n    \u251c\u2500 \u6574\u6570\/\u5b57\u7b26\u4e32\/\u5217\u8868\/\u81ea\u5b9a\u4e49\u7c7b\u5b9e\u4f8b\u7b49\u6240\u6709\u8fd0\u884c\u65f6\u5bf9\u8c61\n    \u2514\u2500 \u6bcf\u4e2a\u5bf9\u8c61\u5185\u7f6e ob_refcnt\uff08\u5f15\u7528\u8ba1\u6570\u5668\uff09\n    &darr; \u5185\u5b58\u7ba1\u7406\u8c03\u5ea6\n[\u5185\u5b58\u7ba1\u7406\u5c42]\n    \u251c\u2500 \u6838\u5fc3\u673a\u52361\uff1a\u5f15\u7528\u8ba1\u6570\n    \u2502   \u251c\u2500 \u5f15\u7528+1\uff1a\u65b0\u5efa\u522b\u540d\u3001\u4f20\u5165\u51fd\u6570\n    \u2502   \u251c\u2500 \u5f15\u7528-1\uff1adel\u5220\u9664\u3001\u53d8\u91cf\u91cd\u8d4b\u503c\n    \u2502   \u2514\u2500 \u89e6\u53d1\u56de\u6536\uff1a\u5f15\u7528\u8ba1\u6570\u5f520 &rarr; \u7acb\u5373\u91ca\u653e\u5bf9\u8c61\u5185\u5b58\n    \u2502\n    \u2514\u2500 \u6838\u5fc3\u673a\u52362\uff1a\u81ea\u52a8\u5783\u573e\u56de\u6536\uff08GC\uff09\n        \u251c\u2500 \u89e3\u51b3\u75db\u70b9\uff1a\u5faa\u73af\u5f15\u7528\u573a\u666f\u4e0b\u5f15\u7528\u8ba1\u6570\u65e0\u6cd5\u5f52\u96f6\n        \u251c\u2500 \u7b97\u6cd51\uff1a\u6807\u8bb0-\u6e05\u9664\n        \u2502   \u251c\u2500 \u4ece\u6839\u5bf9\u8c61\uff08\u6808\/\u5168\u5c40\u53d8\u91cf\uff09\u904d\u5386\u6240\u6709\u53ef\u8fbe\u5bf9\u8c61\n        \u2502   \u2514\u2500 \u672a\u6807\u8bb0\u7684\u4e0d\u53ef\u8fbe\u5bf9\u8c61 &rarr; \u5224\u5b9a\u4e3a\u5783\u573e\u76f4\u63a5\u56de\u6536\n        \u2514\u2500 \u7b97\u6cd52\uff1a\u5206\u4ee3\u56de\u6536\n            \u251c\u2500 0\u4ee3\uff08\u65b0\u751f\u4ee3\uff09\uff1a\u65b0\u521b\u5efa\u5bf9\u8c61\uff0c\u626b\u63cf\u9891\u7387\u6700\u9ad8\n            \u251c\u2500 1\u4ee3\uff08\u4e2d\u751f\u4ee3\uff09\uff1a0\u4ee3\u5b58\u6d3b\u5bf9\u8c61\u664b\u5347\uff0c\u626b\u63cf\u9891\u7387\u4e2d\u7b49\n            \u2514\u2500 2\u4ee3\uff08\u8001\u5e74\u4ee3\uff09\uff1a1\u4ee3\u5b58\u6d3b\u5bf9\u8c61\u664b\u5347\uff0c\u626b\u63cf\u9891\u7387\u6700\u4f4e\n    &darr; \u5185\u5b58\u5206\u914d\u8c03\u5ea6\n[\u5185\u5b58\u5206\u914d\u5c42]\n    \u251c\u2500 \u5206\u652f1\uff1a\u5c0f\u5bf9\u8c61\u5206\u914d\uff08&lt;256KB\uff09\n    \u2502   \u2514\u2500 \u8c03\u7528pymalloc &rarr; \u79c1\u6709\u5185\u5b58\u6c60\n    \u2502       \u251c\u2500 Arena\uff08\u5927\u5757\u5185\u5b58\u533a\uff09\n    \u2502       \u251c\u2500 Pool\uff08\u5185\u5b58\u6c60\u5355\u5143\uff09\n    \u2502       \u2514\u2500 Block\uff08\u6700\u5c0f\u5206\u914d\u5355\u5143\uff09\n    \u2502\n    \u251c\u2500 \u5206\u652f2\uff1a\u5927\u5bf9\u8c61\u5206\u914d\uff08&gt;256KB\uff09\n    \u2502   \u2514\u2500 \u76f4\u63a5\u8c03\u7528\u7cfb\u7edf\u63a5\u53e3 &rarr; malloc\/mmap\n    \u2502\n    \u2514\u2500 \u5185\u7f6e\u7f13\u5b58\u673a\u5236\n        \u251c\u2500 \u5c0f\u6574\u6570\u6c60\uff1a\u9884\u521b\u5efa-5~256\u6240\u6709\u6574\u6570\u5bf9\u8c61\uff0c\u5168\u5c40\u590d\u7528\n        \u2514\u2500 \u5b57\u7b26\u4e32\u9a7b\u7559\u6c60\uff1a\u90e8\u5206\u77ed\u5b57\u7b26\u4e32\u5168\u5c40\u5171\u4eab\uff0c\u907f\u514d\u91cd\u590d\u521b\u5efa\n    &darr; \u5e95\u5c42\u4ea4\u4e92\n[\u64cd\u4f5c\u7cfb\u7edf\u5185\u5b58\u5c42]\n    \u2514\u2500 \u7269\u7406\u5185\u5b58\/\u865a\u62df\u5185\u5b58\u9875<\/code><\/pre>","protected":false},"excerpt":{"rendered":"<p>Python \u7684\u7c7b\uff08Class\uff09\u4e0e\u5bf9\u8c61\uff08Object\uff09\u662f\u9762\u5411\u5bf9\u8c61\u7f16\u7a0b\uff08OOP\uff09\u7684\u6838\u5fc3\u3002\u5982\u679c\u7528\u5927\u767d\u8bdd\u6765\u5f62\u5bb9\uff1a\u7c7b\u662f\u201c\u8bbe\u8ba1\u56fe\u7eb8\u201d\uff0c\u5bf9\u8c61\u662f\u6839\u636e\u56fe\u7eb8\u751f\u4ea7\u51fa\u6765\u7684\u201c\u771f\u8f66\u201d\u3002 &#8230;<\/p>","protected":false},"author":1,"featured_media":57,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[35],"tags":[45],"class_list":["post-102","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-python","tag-python"],"_links":{"self":[{"href":"https:\/\/www.cloudnote.cc\/index.php\/wp-json\/wp\/v2\/posts\/102","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.cloudnote.cc\/index.php\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.cloudnote.cc\/index.php\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.cloudnote.cc\/index.php\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/www.cloudnote.cc\/index.php\/wp-json\/wp\/v2\/comments?post=102"}],"version-history":[{"count":1,"href":"https:\/\/www.cloudnote.cc\/index.php\/wp-json\/wp\/v2\/posts\/102\/revisions"}],"predecessor-version":[{"id":104,"href":"https:\/\/www.cloudnote.cc\/index.php\/wp-json\/wp\/v2\/posts\/102\/revisions\/104"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/www.cloudnote.cc\/index.php\/wp-json\/wp\/v2\/media\/57"}],"wp:attachment":[{"href":"https:\/\/www.cloudnote.cc\/index.php\/wp-json\/wp\/v2\/media?parent=102"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.cloudnote.cc\/index.php\/wp-json\/wp\/v2\/categories?post=102"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.cloudnote.cc\/index.php\/wp-json\/wp\/v2\/tags?post=102"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}