On Wed, Jun 26, 2019 at 10:16 PM Chris Angelico <ros...@gmail.com> wrote:
>
> On Thu, Jun 27, 2019 at 5:29 AM Yanghao Hua <yanghao...@gmail.com> wrote:
> >
> > On Wed, Jun 26, 2019 at 4:47 PM Chris Angelico <ros...@gmail.com> wrote:
> > [...]
> > > There are many things that can be implemented with dunders, yes, but
> > > in Python, I would expect these two functions to behave identically:
> > >
> > > def f1(x):
> > >     return frob(x).spam
> > >
> > > def f2(x):
> > >     f = frob(x)
> > >     s = f.spam
> > >     return s
> > >
> > > This correlation is critical to sane refactoring. You should be able
> > > to transform f1 into f2, and then insert print calls to see what 'f'
> > > and 's' are, without affecting the behaviour of the function. The
> > > proposed magic would change and completely break this; and as such, it
> > > violates programmer expectations *across many languages* regarding
> > > refactoring.
> >
> > Chris, I might need a bit more education here. I am trying to guess
> > what you meant to say here is if in f2(), f or s is already defined,
> > it will then change the "usual" understanding. In this case, I am
> > assuming when you start to assign in f2() a local variable f or s with
> > an object that has __set/getself__(), then you know later on assigning
> > to it will mean differently. How is this different from descriptors?
> > when you do x.y = z and if y is a descriptor you don't expect x.y is
> > now pointing/binding to z, you have to understand the object behavior
> > anyway. I do not see how this is different in the set/getself() case.
>
> Let's suppose that frob() returns something that has a __getself__
> method. Will f1 trigger its call? Will f2? If the answer is "yes" to
> both, then when ISN'T getself called? If the answer is "no" to both,

What's the problem for the "yes" case? If you define such an object of
course __get/setself__() is always called, and f1() is still equal to
f2().

> then when IS it called? And if they're different, then you have the
> refactoring headache that I described. That's a problem that simply
> doesn't happen with descriptors, because this example is using local
> variables - local variables are the obvious way to refactor anything.

What's the point if it is never called? I cannot make any sense from
this example unfortunately, maybe I am too dumb ...

> You're proposing allowing values to redefine local variables. That is
> completely different from descriptors and other forms of magic, which
> allow a namespace to define how it behaves.

First, this is not my proposal. The one I had is a new operator, and
it is NOT allowing values to redefine local variables. But I do like
this one a lot more indeed. Second, isn't descriptor doing exactly the
same thing, but just within your so called "namespace"? Isn't the top
level itself a namespace? isn't every function local itself a
namespace? The entire descriptor concept in my view is a awkward
concept that is having too many odds and special cases. And this one,
on the other hand, is truly generic and universal.

> I'm basically done trying to explain this to you. Multiple people have
> tried to explain how this is NOT the same as descriptors, and you keep
> coming back to "but descriptors can do this too". They cannot. You are
> granting magical powers to *values*, not to namespaces. That makes
> basically ALL code impossible to reason about.

Sheep can never explain to wolfs why it is a good idea to be
vegetarian, can they? And like wise vice versa. Please help to teach
me and trust that a 10 years python developer could still learn a
thing or two. And don't be too childish ;-) I really just don't get
the point (if there is one).
_______________________________________________
Python-ideas mailing list -- python-ideas@python.org
To unsubscribe send an email to python-ideas-le...@python.org
https://mail.python.org/mailman3/lists/python-ideas.python.org/
Message archived at 
https://mail.python.org/archives/list/python-ideas@python.org/message/NLN3VZJNS5FD5VUKTAV7GLIPX662ABPF/
Code of Conduct: http://python.org/psf/codeofconduct/

Reply via email to