Darren Dale <dsdal...@gmail.com> added the comment: On Sat, Jun 11, 2011 at 8:55 AM, Nick Coghlan <rep...@bugs.python.org> wrote: > > Nick Coghlan <ncogh...@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 <rep...@bugs.python.org> <http://bugs.python.org/issue11610> _______________________________________ _______________________________________________ Python-bugs-list mailing list Unsubscribe: http://mail.python.org/mailman/options/python-bugs-list/archive%40mail-archive.com