Addition of a .= operator
Rob Cliffe
rob.cliffe at btinternet.com
Sun May 21 15:30:45 EDT 2023
On 20/05/2023 18:54, Alex Jando wrote:
> I have many times had situations where I had a variable of a certain type, all I cared about it was one of it's methods.
>
> For example:
>
> ------------------------------------------------------------
> import hashlib
> hash = hashlib.sha256(b'word')
> hash = hash.hexdigest()
> ------------------------------------------------------------
> import enum
> class Number(enum.Enum):
> One: int = 1
> Two: int = 2
> Three: int = 3
> num = Number.One
> num = num.value
> ------------------------------------------------------------
>
> Now to be fair, in the two situations above, I could just access the method right as I declare the object, however, sometimes when passing values into functions, it's a lot messier to do that.
>
> So what I'm suggesting is something like this:
>
> ------------------------------------------------------------
> import hashlib
> hash = hashlib.sha256(b'word')
> hash.=hexdigest()
> ------------------------------------------------------------
> import enum
> class Number(enum.Enum):
> One: int = 1
> Two: int = 2
> Three: int = 3
> num = Number.One
> num.=value
> ------------------------------------------------------------
It seems to me that this would encourage bad style. When you write
num = num.value
you are using num with two different meanings (an object and an
attribute of it). The original object is lost.
If down the line you needed to access another attribute of the object,
you would have to backtrack:
val = num.value
spam = num.spam
or at least write the statements in the right order, so that you only
overwrite num at the end:
spam = num.spam
num = num.value
Either way, you are making the code more fragile i.e. harder to maintain.
Now of course, in your use case it may be perfectly appropriate to write
"num = num.value" as you did.
But IMO it's not something that should be encouraged in general.
Best wishes
Rob Cliffe
More information about the Python-list
mailing list