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