@@ -990,7 +990,7 @@ The documentation shows a typical use to define a managed attribute ``x``:
990
990
AttributeError: 'C' object has no attribute '_C__x'
991
991
992
992
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:
994
994
995
995
.. testcode ::
996
996
@@ -1004,18 +1004,10 @@ here is a pure Python equivalent:
1004
1004
if doc is None and fget is not None:
1005
1005
doc = fget.__doc__
1006
1006
self.__doc__ = doc
1007
- self._name = None
1007
+ self.__name__ = ''
1008
1008
1009
1009
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
1019
1011
1020
1012
def __get__(self, obj, objtype=None):
1021
1013
if obj is None:
@@ -1044,19 +1036,13 @@ here is a pure Python equivalent:
1044
1036
self.fdel(obj)
1045
1037
1046
1038
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__)
1050
1040
1051
1041
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__)
1055
1043
1056
1044
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__)
1060
1046
1061
1047
.. testcode ::
1062
1048
:hide:
0 commit comments