Alex Waygood <[email protected]> added the comment:
Some thoughts from me, as an unqualified but interested party:
Like Randolph, I very much like having class properties in the language, and
have used them in several projects since their introduction in 3.9. I find
they're especially useful with Enums. However, while the bug in doctest, for
example, is relatively trivial to fix (see my PR in #44904), it seems to me
plausible that bugs might crop up in other standard library modules as well. As
such, leaving class properties in the language might mean that several more
bugfixes relating to this feature would have to be made in the future. So, I
can see the argument for removing them.
It seems to me that Randolph's idea of changing `classmethod` from a class into
a function would break a lot of existing code. As an alternative, one small
adjustment that could be made would be to special-case `isinstance()` when it
comes to class properties. In pure Python, you could achieve this like this:
```
oldproperty = property
class propertymeta(type):
def __instancecheck__(cls, obj):
return super().__instancecheck__(obj) or (
isinstance(obj, classmethod)
and super().__instancecheck__(obj.__func__)
)
class property(oldproperty, metaclass=propertymeta): pass
```
This would at least mean that `isinstance(classmethod(property(lambda cls:
42)), property)` and `isinstance(classmethod(property(lambda cls: 42)),
classmethod)` would both evaluate to `True`. This would be a bit of a lie (an
instance of `classmethod` isn't an instance of `property`), but would at least
warn the caller that the object they were dealing with had some propertylike
qualities to it.
Note that this change wouldn't fix the bugs in abc and doctest, nor does it fix
the issue with class-property setter logic that Randolph identified.
With regards to the point that `@staticmethod` cannot be stacked on top of
`@property`: it strikes me that this feature isn't really needed. You can
achieve the same effect just by stacking `@classmethod` on top of `@property`
and not using the `cls` parameter.
----------
_______________________________________
Python tracker <[email protected]>
<https://bugs.python.org/issue45356>
_______________________________________
_______________________________________________
Python-bugs-list mailing list
Unsubscribe:
https://mail.python.org/mailman/options/python-bugs-list/archive%40mail-archive.com