[issue46550] __slots__ updates despite being read-only

2022-02-02 Thread Ronald Oussoren
Ronald Oussoren added the comment: There's a use case for using a dict for __slots__, pydoc will use a dict value for the slots as a mapping from attribute name to attribute documentation. Because of that it is not really worthwhile to transform the value of __slots__ during class definition

[issue46550] __slots__ updates despite being read-only

2022-02-02 Thread Ronald Oussoren
Ronald Oussoren added the comment: W.r.t. augmented assignments, this is a good blog post about how they work under the hood: https://snarky.ca/unravelling-augmented-arithmetic-assignment/ -- ___ Python tracker

[issue46550] __slots__ updates despite being read-only

2022-01-28 Thread Eryk Sun
Eryk Sun added the comment: If the target object of an augmented assignment doesn't support the in-place binary operation, the normal binary operation is used instead. Thus an augmented assignment is implemented to always assign the result back to the target. For an attribute, that's similar

[issue46550] __slots__ updates despite being read-only

2022-01-28 Thread Ian Lee
Ian Lee added the comment: @ronaldoussoren - right, I agree that I think that raising the AttributeErrors is the right thing. The part that feels like a bug to me is that the exception is saying it is read only and yet it is not being treated it that way (even though as you point out, the en

[issue46550] __slots__ updates despite being read-only

2022-01-28 Thread Ronald Oussoren
Ronald Oussoren added the comment: Python's is behaving as expected here (but see below): the slots definition tells the interpreter which attribute names can be set on an instance and "__slots__" is not one of those attributes in your code. "a.__slots__ += ..." will try to set the "a.__slo

[issue46550] __slots__ updates despite being read-only

2022-01-27 Thread Eryk Sun
Eryk Sun added the comment: Please read about augmented assignment [1]. In the REPL, use help("+="). An augmented assignment evaluates the target (which, unlike normal assignment statements, cannot be an unpacking) and the expression list, performs the binary operation specific to

[issue46550] __slots__ updates despite being read-only

2022-01-27 Thread Ian Lee
Ian Lee added the comment: @sobolevn - Hmm, interesting.. I tested in python 3.9 which I had available, and I can reproduce your result, but I think it's different because you are using a tuple. If I use a list then I see my same reported behavior in 3.9: ```python Python 3.9.10 (main, Jan

[issue46550] __slots__ updates despite being read-only

2022-01-27 Thread Nikita Sobolev
Nikita Sobolev added the comment: It does not happen on `3.11` (main): ``` Python 3.11.0a4+ (heads/main-dirty:ef3ef6fa43, Jan 20 2022, 20:48:25) [Clang 11.0.0 (clang-1100.0.33.16)] on darwin Type "help", "copyright", "credits" or "license" for more information. >>> class A: ... __slots__ =

[issue46550] __slots__ updates despite being read-only

2022-01-27 Thread Ian Lee
New submission from Ian Lee : Hi there - I admit that I don't really understand the internals here, so maybe there is a good reason for this, but I thought it was weird when I just ran across it. If I create a new class `A`, and set it's `__slots`: ```python ➜ ~ docker run -it python:3.10 P