convenience

Avi Gross avigross at verizon.net
Wed Mar 23 00:40:24 EDT 2022


Greg,

Yes, what I describe may not be common and some code goes to serious lengths 
precisely to make direct connections to internals on an object hard to access.

But Python indeed allows and perhaps encourages you to use what you consider
side effects but perhaps more. There are many dunder methods that allow
all sorts of side effects or direct effects.

You can set it up so an access of a variable increments a counter
but perhaps it can set it up so three tries at guessing a password disables it or refuses
to accept a number out of your bounds. Or it may be that some accesses to say write
a value might also update several other values. For example, if you store a distance and
also a time, any change of either one resets the value of a stored item holding a velocity.
Perhaps adding additional values (or removing any) results in an immediate recalculation
of the mean or standard deviation or whatever.

If you allow direct access then you can make changes that get around that and I see no reason
to assume programs do not use such ideas.

Perhaps worse is that items may be dynamic. If an object representing me and my library card
checks out a book, a new object may be created that holds the book. If you copy a pointer to
the reference to the book in the library card object and later the book is returned and a new book
checked out, then your reference is now pointing to the old book. If your goal is to get to the
CURRENT book, you failed!

So I stand by my suggestion that unless you know the code well and can be sure you won't
corrupt things, this kind of convenient access has possible dangers.



-----Original Message-----
From: Greg Ewing <greg.ewing at canterbury.ac.nz>
To: python-list at python.org
Sent: Tue, Mar 22, 2022 7:12 pm
Subject: Re: convenience


On 23/03/22 7:00 am, Avi Gross wrote:

> But are there costs or even errors

> if you approach an inner part of an object directly? Can there be dunder methods not

> invoked that would be from the standard approach? What kind of inadvertent

> errors can creep in?



The attribute could be a property that returns different objects

at different times depending on some condition. In that case

you will need to think about whether you want the current value

of the attribute, or the value it had when you looked it up

before.



Concerning dunder methods, there are a bunch of them involved in

looking up an attribute of an object. Theoretically it's possible

for these to have side effects and for bad things to happen if you

skip them. But that would be very unusual and surprising, and we

generally assume such things don't happen.



-- 

Greg

-- 

https://mail.python.org/mailman/listinfo/python-list



More information about the Python-list mailing list