Attack a sacred Python Cow
Steven D'Aprano
steve at REMOVE-THIS-cybersource.com.au
Sun Jul 27 18:54:41 EDT 2008
On Sun, 27 Jul 2008 12:33:16 -0700, Russ P. wrote:
> On Jul 27, 1:19 am, Steven D'Aprano <st... at REMOVE-THIS-
> cybersource.com.au> wrote:
>> On Sat, 26 Jul 2008 17:14:46 -0700, Russ P. wrote:
>
>> > You take the name down to a single letter. As I suggested in an
>> > earlier post on this thread, why not take it down to zero letters?
>>
>> The question isn't "why not", but "why". The status quo works well as
>> it is, even if it isn't perfect. Prove that implicit self is a good
>> idea -- or at least prove that it is an idea worth considering.
>>
>> "I don't like typing self" doesn't convince me. The same argument could
>> be made typing parentheses, colons, commas, etc. We could end up with
>> something like this:
>>
>> class Foo base
>> def method x y z
>> .args = list x y z
>>
>> That's not necessarily wrong, but it's not Python.
>
> And what does that have to do with my suggestion? Absolutely nothing.
Not at all. You're suggesting a change to Python's syntax. I've suggested
a couple more changes to Python syntax. I don't intend them to be taken
seriously, but only to illustrate a point that syntax defines how a
language is written. You want to change that.
> It's a red herring that you seem to be using to obscure the fact that
> you have no rational argument to make.
I don't have to make a rational argument for keeping the status quo. That
status quo just *is*. You want people to change, you need to convince
them that such a change is not just "not bad" but a serious advantage,
enough to make up for all the work required to implement it.
I'm listening. Tell me why removing self if not merely harmless, but
actively better.
[...]
>> By "better" do you mean "uglier"? If so, I agree with you. If not, then
>> I disagree that it is better.
>
> You seem to be freaked out by an empty argument. Actually, it bothers me
> a bit too, which is why I suggested that a period could be used as the
> first argument to indicate that, like Clint Eastwood in The Good, the
> Bad, and the Ugly, "self" had no name here.
Well there you go now. How should we *talk* about this piece of code? Try
writing a comment or docstring, or even sitting down with a fellow
programmer and discussing it. What do you call this implicit Object With
No Name?
def fun( , cat):
.cat = cat # assumes that the Object With No Name has foo
versus
def fun(self, cat):
self.cat = cat # assumes that self has foo
Before you suggest that people will continue to call the first argument
"self" but just not write it down anywhere, I suggest that's a terrible
idea and one which will confuse a lot of people. "Where's this 'self'
defined? I can't find it anywhere!"
A slightly better suggestion is "the instance", but that fails here:
class C(object):
def method(, other):
assert isinstance(other, C)
.cat = other # assumes that the instance has foo
# er, that is to say, the implicit instance,
# not the other instance
The ability to talk easily about the code is invaluable. Implicit self
makes it harder to talk about the code.
[...]
>> Even uglier than the first. Convince me there's a benefit.
>
> Actually, I think it's elegant. And I'll bet that if Guido had suggested
> it, you would think it was beautiful.
Oh please. I think the syntax for ternary if is ugly, and Guido came up
with that, and it doesn't even use punctuation.
> Why force a name to be used when none is needed?
But a name is needed.
class Foo(base1, base2, base3):
def meth(self, arg):
super(Foo, self).meth(arg)
print self
try:
value = _cache[self]
except KeyError:
value = some_long_calculation(self)
How do you pass self to arbitrary functions without a name?
--
Steven
More information about the Python-list
mailing list