Skip to content

Commit 767dfb9

Browse files
[3.13] Simplify Property() recipe to focus on the essentials (gh-123585) (gh-123586)
1 parent cfdf376 commit 767dfb9

File tree

1 file changed

+6
-20
lines changed

1 file changed

+6
-20
lines changed

Doc/howto/descriptor.rst

Lines changed: 6 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -990,7 +990,7 @@ The documentation shows a typical use to define a managed attribute ``x``:
990990
AttributeError: 'C' object has no attribute '_C__x'
991991

992992
To see how :func:`property` is implemented in terms of the descriptor protocol,
993-
here is a pure Python equivalent:
993+
here is a mostly pure Python equivalent:
994994

995995
.. testcode::
996996

@@ -1004,18 +1004,10 @@ here is a pure Python equivalent:
10041004
if doc is None and fget is not None:
10051005
doc = fget.__doc__
10061006
self.__doc__ = doc
1007-
self._name = None
1007+
self.__name__ = ''
10081008

10091009
def __set_name__(self, owner, name):
1010-
self._name = name
1011-
1012-
@property
1013-
def __name__(self):
1014-
return self._name if self._name is not None else self.fget.__name__
1015-
1016-
@__name__.setter
1017-
def __name__(self, value):
1018-
self._name = value
1010+
self.__name__ = name
10191011

10201012
def __get__(self, obj, objtype=None):
10211013
if obj is None:
@@ -1044,19 +1036,13 @@ here is a pure Python equivalent:
10441036
self.fdel(obj)
10451037

10461038
def getter(self, fget):
1047-
prop = type(self)(fget, self.fset, self.fdel, self.__doc__)
1048-
prop._name = self._name
1049-
return prop
1039+
return type(self)(fget, self.fset, self.fdel, self.__doc__)
10501040

10511041
def setter(self, fset):
1052-
prop = type(self)(self.fget, fset, self.fdel, self.__doc__)
1053-
prop._name = self._name
1054-
return prop
1042+
return type(self)(self.fget, fset, self.fdel, self.__doc__)
10551043

10561044
def deleter(self, fdel):
1057-
prop = type(self)(self.fget, self.fset, fdel, self.__doc__)
1058-
prop._name = self._name
1059-
return prop
1045+
return type(self)(self.fget, self.fset, fdel, self.__doc__)
10601046

10611047
.. testcode::
10621048
:hide:

0 commit comments

Comments
 (0)