Daniel Urban <urban.dani...@gmail.com> added the comment:

@abstractmethod
@classmethod
def ...
doesn't work because classmethod objects doesn't have a __dict__, so setting 
arbitrary attributes don't work, and abstractmethod tries to set the 
__isabstractmethod__ atribute to True.


The other order:
@classmethod
@abstractmethod
def ...
doesn't work, because the abstractmethod decorator sets the function's 
__isabstractmethod__ attribute to True, but when ABCMeta.__new__ checks the 
object in the namespace of the class, it won't find it, because the classmethod 
object won't have an __isabstractmethod__ attribute.

The situation is the same with staticmethod.

One possible solution would be adding a descriptor to classmethod (and 
staticmethod), with the name "__isabstractmethod__", which on __get__ would 
check its underlying callable for this attribute, and on __set__ would set this 
attribute on that callable. I think this way both order should work.

----------

_______________________________________
Python tracker <rep...@bugs.python.org>
<http://bugs.python.org/issue5867>
_______________________________________
_______________________________________________
Python-bugs-list mailing list
Unsubscribe: 
http://mail.python.org/mailman/options/python-bugs-list/archive%40mail-archive.com

Reply via email to