Skip to content

[3.13] Simplify Property() recipe to focus on the essentials (gh-123585) #123586

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Merged
merged 1 commit into from
Sep 1, 2024
Merged
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
26 changes: 6 additions & 20 deletions Doc/howto/descriptor.rst
Original file line number Diff line number Diff line change
Expand Up @@ -990,7 +990,7 @@ The documentation shows a typical use to define a managed attribute ``x``:
AttributeError: 'C' object has no attribute '_C__x'

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

.. testcode::

Expand All @@ -1004,18 +1004,10 @@ here is a pure Python equivalent:
if doc is None and fget is not None:
doc = fget.__doc__
self.__doc__ = doc
self._name = None
self.__name__ = ''

def __set_name__(self, owner, name):
self._name = name

@property
def __name__(self):
return self._name if self._name is not None else self.fget.__name__

@__name__.setter
def __name__(self, value):
self._name = value
self.__name__ = name

def __get__(self, obj, objtype=None):
if obj is None:
Expand Down Expand Up @@ -1044,19 +1036,13 @@ here is a pure Python equivalent:
self.fdel(obj)

def getter(self, fget):
prop = type(self)(fget, self.fset, self.fdel, self.__doc__)
prop._name = self._name
return prop
return type(self)(fget, self.fset, self.fdel, self.__doc__)

def setter(self, fset):
prop = type(self)(self.fget, fset, self.fdel, self.__doc__)
prop._name = self._name
return prop
return type(self)(self.fget, fset, self.fdel, self.__doc__)

def deleter(self, fdel):
prop = type(self)(self.fget, self.fset, fdel, self.__doc__)
prop._name = self._name
return prop
return type(self)(self.fget, self.fset, fdel, self.__doc__)

.. testcode::
:hide:
Expand Down
Loading