@@ -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
992992To 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