Author ncoghlan
Recipients Darren.Dale, benjamin.peterson, daniel.urban, dsdale24, eric.araujo, michael.foord, ncoghlan, stutzbach
Date 2011-06-11.12:55:16
SpamBayes Score 3.54406e-05
Marked as misclassified No
Message-id <1307796917.62.0.113519414273.issue11610@psf.upfronthosting.co.za>
In-reply-to
Content
inspect.getattr_static has the necessary logic to search for descriptors without invoking them.

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__

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.
History
Date User Action Args
2011-06-11 12:55:17ncoghlansetrecipients: + ncoghlan, benjamin.peterson, stutzbach, eric.araujo, michael.foord, daniel.urban, dsdale24, Darren.Dale
2011-06-11 12:55:17ncoghlansetmessageid: <1307796917.62.0.113519414273.issue11610@psf.upfronthosting.co.za>
2011-06-11 12:55:17ncoghlanlinkissue11610 messages
2011-06-11 12:55:16ncoghlancreate