<div dir="ltr"><div class="gmail_quote"><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left:1px solid rgb(204,204,204);padding-left:1ex"><br>
My question is really: assuming that we redesign <br>
staticmethod/classmethod anyway, should we make them callable?<br>
</blockquote><div></div></div><div><br></div><div><div class="gmail_default" style="font-family:arial,helvetica,sans-serif">​I think so.  staticmethod and classmethod should affect descriptor behavior.</div><div class="gmail_default" style="font-family:arial,helvetica,sans-serif">And it should behave as normal function.​</div><div class="gmail_default" style="font-family:arial,helvetica,sans-serif"><br></div><div class="gmail_default" style="font-family:arial,helvetica,sans-serif"><div class="gmail_default">>>> @classmethod</div><div class="gmail_default">... def foo(cls):</div><div class="gmail_default">...     print(cls)</div><div class="gmail_default">...</div><div class="gmail_default">>>> @staticmethod</div><div class="gmail_default">... def bar(arg):</div><div class="gmail_default">...     print(arg)</div><div class="gmail_default">...</div><div class="gmail_default">>>> foo(int)  # this should work</div><div class="gmail_default">Traceback (most recent call last):</div><div class="gmail_default">  File "<stdin>", line 1, in <module></div><div class="gmail_default">TypeError: 'classmethod' object is not callable</div><div class="gmail_default">>>> bar(42)  # this should work too<br></div><div class="gmail_default">Traceback (most recent call last):</div><div class="gmail_default">  File "<stdin>", line 1, in <module></div><div class="gmail_default">TypeError: 'staticmethod' object is not callable</div><div class="gmail_default"><br></div><div class="gmail_default"><br></div><div class="gmail_default">When Python 4, I think we can even throw away classmethod and staticmethod object.</div><div class="gmail_default">PyFunction can have binding flag instead, like METH_CLASS and METH_STATIC for PyCFunction.</div><div class="gmail_default">classmethod and staticmethod is just a function which modify the flag.</div></div><br></div><div><div class="gmail_default" style="font-family:arial,helvetica,sans-serif">​But I'm not sure.  Calling in Python is too complicated ​to fully understand.</div><br></div><div><div class="gmail_default" style="font-family:arial,helvetica,sans-serif">​Regards,​</div></div>-- <br><div dir="ltr" class="gmail_signature">INADA Naoki  <<a href="mailto:songofacandy@gmail.com" target="_blank">songofacandy@gmail.com</a>></div></div>