11# SOME DESCRIPTIVE TITLE.
2- # Copyright (C) 2001-2024 , Python Software Foundation
2+ # Copyright (C) 2001-2025 , Python Software Foundation
33# This file is distributed under the same license as the Python package.
44# FIRST AUTHOR <EMAIL@ADDRESS>, YEAR.
55#
66# Translators:
7- # Rafael Fontenelle <[email protected] >, 2024 7+ # Rafael Fontenelle <[email protected] >, 2025 88#
99#, fuzzy
1010msgid ""
1111msgstr ""
1212"Project-Id-Version : Python 3.12\n "
1313"Report-Msgid-Bugs-To : \n "
14- "POT-Creation-Date : 2024-12-27 14:52 +0000\n "
14+ "POT-Creation-Date : 2025-01-17 14:51 +0000\n "
1515"PO-Revision-Date : 2024-05-11 00:32+0000\n "
16- "
Last-Translator :
Rafael Fontenelle <[email protected] >, 2024 \n "
16+ "
Last-Translator :
Rafael Fontenelle <[email protected] >, 2025 \n "
1717"Language-Team : Chinese (China) (https://app.transifex.com/python-doc/teams/5390/zh_CN/)\n "
1818"MIME-Version : 1.0\n "
1919"Content-Type : text/plain; charset=UTF-8\n "
@@ -256,6 +256,9 @@ msgid ""
256256" parameter that lets the :meth:`~object.__get__` method learn the target "
257257"directory. The *objtype* parameter is the class *Directory*."
258258msgstr ""
259+ "除了说明描述器如何运行计算,这个例子也揭示了传给 :meth:`~object.__get__` 的形参的目的。 *self* 形参为 "
260+ "*size*,即一个 *DirectorySize* 的实例。 *obj* 形参为 *g* 或 *s*,即一个 *Directory* 的实例。 "
261+ "*obj* 形参让 :meth:`~object.__get__` 方法获知目标目录。 *objtype* 形参为 *Directory* 类。"
259262
260263#: ../../howto/descriptor.rst:131
261264msgid "Managed attributes"
@@ -269,6 +272,8 @@ msgid ""
269272" The descriptor's :meth:`~object.__get__` and :meth:`~object.__set__` "
270273"methods are triggered when the public attribute is accessed."
271274msgstr ""
275+ "描述器的一种流行用法是管理对实例数据的访问。 描述器被分配给类字典中的公有属性,而实际数据则作为私有属性存储在实例字典中。 描述器的 "
276+ ":meth:`~object.__get__` 和 :meth:`~object.__set__` 方法会在公有属性被访问时被触发。"
272277
273278#: ../../howto/descriptor.rst:139
274279msgid ""
@@ -362,6 +367,28 @@ msgid ""
362367"INFO:root:Accessing 'age' giving 40\n"
363368"40"
364369msgstr ""
370+ ">>> mary = Person('Mary M', 30) # 初始年龄更新会被记录\n"
371+ "INFO:root:Updating 'age' to 30\n"
372+ ">>> dave = Person('David D', 40)\n"
373+ "INFO:root:Updating 'age' to 40\n"
374+ "\n"
375+ ">>> vars(mary) # 私有属性中的实际数据\n"
376+ "{'name': 'Mary M', '_age': 30}\n"
377+ ">>> vars(dave)\n"
378+ "{'name': 'David D', '_age': 40}\n"
379+ "\n"
380+ ">>> mary.age # 访问数据并记录查找操作\n"
381+ "INFO:root:Accessing 'age' giving 30\n"
382+ "30\n"
383+ ">>> mary.birthday() # 更新也会被记录\n"
384+ "INFO:root:Accessing 'age' giving 30\n"
385+ "INFO:root:Updating 'age' to 31\n"
386+ "\n"
387+ ">>> dave.name # 常规属性查找不会被记录\n"
388+ "'David D'\n"
389+ ">>> dave.age # 只有被管理的属性会被记录\n"
390+ "INFO:root:Accessing 'age' giving 40\n"
391+ "40"
365392
366393#: ../../howto/descriptor.rst:206
367394msgid ""
@@ -391,6 +418,9 @@ msgid ""
391418" names can be recorded, giving each descriptor its own *public_name* and "
392419"*private_name*:"
393420msgstr ""
421+ "在此示例中,:class:`!Person` 类具有两个描述器实例 *name* 和 *age*。 当 :class:`!Person` "
422+ "类被定义时,它将在 *LoggedAccess* 中执行对 :meth:`~object.__set_name__` "
423+ "的回调以便记录字段名称,给予每个描述器自己的 *public_name* 和 *private_name*:"
394424
395425#: ../../howto/descriptor.rst:223
396426msgid ""
@@ -1035,6 +1065,30 @@ msgid ""
10351065" return cls_var # class variable\n"
10361066" raise AttributeError(name)"
10371067msgstr ""
1068+ "def find_name_in_mro(cls, name, default):\n"
1069+ " \" Emulate _PyType_Lookup() in Objects/typeobject.c\" \n"
1070+ " for base in cls.__mro__:\n"
1071+ " if name in vars(base):\n"
1072+ " return vars(base)[name]\n"
1073+ " return default\n"
1074+ "\n"
1075+ "def object_getattribute(obj, name):\n"
1076+ " \" Emulate PyObject_GenericGetAttr() in Objects/object.c\" \n"
1077+ " null = object()\n"
1078+ " objtype = type(obj)\n"
1079+ " cls_var = find_name_in_mro(objtype, name, null)\n"
1080+ " descr_get = getattr(type(cls_var), '__get__', null)\n"
1081+ " if descr_get is not null:\n"
1082+ " if (hasattr(type(cls_var), '__set__')\n"
1083+ " or hasattr(type(cls_var), '__delete__')):\n"
1084+ " return descr_get(cls_var, obj, objtype) # 数据描述器\n"
1085+ " if hasattr(obj, '__dict__') and name in vars(obj):\n"
1086+ " return vars(obj)[name] # 实例变量\n"
1087+ " if descr_get is not null:\n"
1088+ " return descr_get(cls_var, obj, objtype) # 非数据描述器\n"
1089+ " if cls_var is not null:\n"
1090+ " return cls_var # 类变量\n"
1091+ " raise AttributeError(name)"
10381092
10391093#: ../../howto/descriptor.rst:719
10401094msgid ""
@@ -1573,6 +1627,14 @@ msgid ""
15731627" return self\n"
15741628" return MethodType(self, obj)"
15751629msgstr ""
1630+ "class Function:\n"
1631+ " ...\n"
1632+ "\n"
1633+ " def __get__(self, obj, objtype=None):\n"
1634+ " \" Simulate func_descr_get() in Objects/funcobject.c\" \n"
1635+ " if obj is None:\n"
1636+ " return self\n"
1637+ " return MethodType(self, obj)"
15761638
15771639#: ../../howto/descriptor.rst:1201
15781640msgid ""
@@ -1613,6 +1675,8 @@ msgid ""
16131675">>> D.__dict__['f']\n"
16141676"<function D.f at 0x00C45070>"
16151677msgstr ""
1678+ ">>> D.__dict__['f']\n"
1679+ "<function D.f at 0x00C45070>"
16161680
16171681#: ../../howto/descriptor.rst:1223
16181682msgid ""
@@ -1625,6 +1689,8 @@ msgid ""
16251689">>> D.f\n"
16261690"<function D.f at 0x00C45070>"
16271691msgstr ""
1692+ ">>> D.f\n"
1693+ "<function D.f at 0x00C45070>"
16281694
16291695#: ../../howto/descriptor.rst:1229
16301696msgid ""
@@ -1639,6 +1705,9 @@ msgid ""
16391705">>> d.f\n"
16401706"<bound method D.f of <__main__.D object at 0x00B18C90>>"
16411707msgstr ""
1708+ ">>> d = D()\n"
1709+ ">>> d.f\n"
1710+ "<bound method D.f of <__main__.D object at 0x00B18C90>>"
16421711
16431712#: ../../howto/descriptor.rst:1236
16441713msgid ""
0 commit comments