[issue11610] Improved support for abstract base classes with descriptors
Darren Dale
report at bugs.python.org
Sat Jun 11 15:21:22 CEST 2011
Darren Dale <dsdale24 at gmail.com> added the comment:
On Sat, Jun 11, 2011 at 8:55 AM, Nick Coghlan <report at bugs.python.org> wrote:
>
> Nick Coghlan <ncoghlan at gmail.com> added the comment:
>
> inspect.getattr_static has the necessary logic to search for descriptors without invoking them.
Unfortunately, we can't import inspect, even inside ABCMeta.__new__.
> However, it may be better to revert to the idea of pushing this functionality back onto the individual descriptors and have the problematic descriptors like property and staticmethod simply implement __isabstractmethod__ as a property.
>
> property:
> @property
> def __isabstractmethod__(self):
> return (self.fget.__isabstractmethod__ or
> self.fset.__isabstractmethod__ or
> self.fdel.__isabstractmethod__)
>
> staticmethod/classmethod:
>
> @property
> def __isabstractmethod__(self):
> return self.__func__.__isabstractmethod__
That's a good idea.
> With this approach, the "one true way" to handle abstract descriptors would be to do:
>
> #instance method
> @abstractmethod
> def f(self):
> ...
>
> @property
> @abstractmethod
> def f(self):
> ...
>
> @classmethod
> @abstractmethod
> def f(self):
> ...
>
> @staticmethod
> @abstractmethod
> def f(self):
> ...
>
> This wouldn't allow for the prettier error messages, but it's much cleaner than having ABCMeta trawling through class attribute dir() lists.
Those classes could conceivably do:
@property
def __abstractmethods__(self):
return ("...", ...)
It would not be required, but if ABCMeta found it, it could use it.
Just a thought.
Darren
----------
_______________________________________
Python tracker <report at bugs.python.org>
<http://bugs.python.org/issue11610>
_______________________________________
More information about the Python-bugs-list
mailing list