Guenther Sohler wrote at 2024-1-9 08:14 +0100: >when i run this code > >a = cube([10,1,1]) >b = a > >i'd like to extend the behaviour of the assignment operator >a shall not only contain the cube, but the cube shall also know which >variable name it >was assigned to, lately. I'd like to use that for improved user interaction.
`Acquisition` (--> `PyPI`) implements something similar. It does not work for variables -- but for attribute access. Look at the following code: ``` from Acquisition import Implicit class AccessAwareContainer(Implicit): ... class AccessAwareContent(Implicit): ... container = AccessAwareContainer() container.content = AccessAwareContent() ``` When you now assign `content = container.content`, then `content` knows that it has been accessed via `container`. If fact `content` is not a true `AccessAwareContent` instance but a wrapper proxy for it. It mostly behaves like an `AccessAwareContent` object but has additional information (e.g. it knows the access parent). It works via a special `__getattribute__` method, essentially implemented by: ``` def __getattribute__(self, k): v = super().__getattribute__(k) return v.__of__(self) if hasattr(v, "__of__") else v ``` Your use case could be implemented similarly (again not for variables and all objects, but for special classes (and maybe special objects)). Your `__getattribute__` could look like: ``` def __getattribute__(self, k): v = super().__getattribute__(k) try: v.name = k except TypeError: pass return v ``` -- https://mail.python.org/mailman/listinfo/python-list