[Python-Dev] Re: PEP 318: Can't we all just get along?
Paul Morrow
pm_mon at yahoo.com
Thu Aug 19 13:45:09 CEST 2004
Jim Fulton wrote:
>
> IMO, yes, although I'd happily accept both syntaxes. I can live with
> @foo to server the people who want it, but it bugs me that I have to
> write:
>
> @clasmethod
> def foo ....
>
> rather than the, to me, much more obvious and readable:
>
> def classmethod foo ...
>
Probably the best-loved features of Python are the shortcuts. The fact
that you don't have to explicitly declare very much and that the
language supports clear, shorthand syntax for frequently used operations...
x = [1,2,3]
y = r[2:9]
def __foo():
That's the good stuff of Python.
I believe that identifying staticmethods and classmethods is an
operation that is (or will be) frequently used as compared to the other
decorators. So it would be great if there was an obvious, shorthand way
for doing that as well.
Even better (IMO) would be a solution that didn't really add any new
keywords to the language, but instead simply formalized widely-used
coding conventions, as was done to denote code block boundaries.
The use of indentation to identify code blocks is a wonderful example of
Python shorthand. It works (some even call it 'genius') because it
leverages a coding convention shared by a majority of programmers.
A week or so ago, Stefan Eischet on comp.lang.python suggested that the
type (static|class|instance) of a method could be inferred through
examination of its first parameter. I agree with his assessment.
The vast majority of instance methods I've seen all use 'self' as the
first parameter. Likewise, most class methods use 'cls' or 'klass' as
their first parameter. If we exploit these conventions, we end up with
a simple, clear, obvious mechanism for denoting (this aspect of) a
method's type.
class Foo(Object):
def m1(self, a, b): # this is an instance method of Foo
pass
def m2(cls, a, b): # this is a class method of Foo
pass
def m3(a, b): # this is a static method of Foo
pass
A special Object (capital 'O') class could work this magic so that old
code didn't break.
I know that this is odd. But then so are most of the great things about
Python.
Paul
More information about the Python-Dev
mailing list