-
Notifications
You must be signed in to change notification settings - Fork 1.3k
Description
CircuitPython version
Adafruit CircuitPython 8.2.0 on 2023-07-05; ESP32 Devkit V1 with ESP32
Adafruit CircuitPython 8.2.2 on 2023-08-01; VCC-GND Studio YD RP2040 with rp2040
Adafruit CircuitPython 8.2.0 on 2023-07-05; Adafruit KB2040 with rp2040
Code/REPL
def __example_print(string):
print(string)
class ExampleClass():
def __init__(self, string) -> None:
self.string = string
def do_print(self):
__example_print(self.string)
# A simple string for testing
string = 'A testing string'
# Should print the string the first time
__example_print(string)
# Create a new object from the class with the same string
new_object = ExampleClass(string)
# Print a second time by accessing the attribute
__example_print(new_object.string)
# Try to run the do_print() method to print it again.
# This should cause an NameError as '__example_print' should be name mangled to '_ExampleClass__example_print', which does not exist
# However, it does not and prints that string we initialized with for the third time
new_object.do_print()
Behavior
Result from running on device:
A testing string
A testing string
A testing string
Expected python behavior:
A testing string
A testing string
Traceback (most recent call last):
File "/tmp/example_code.py", line 26, in <module>
new_object.do_print()
File "/tmp/example_code.py", line 9, in do_print
__example_print(self.string)
^^^^^^^^^^^^^^^
NameError: name '_ExampleClass__example_print' is not defined
Description
No response
Additional information
Was working on getting module development tooling on a laptop. When trying to use a community CircuitPython library that knowingly worked on a microcontroller, and it didn't need anything specific to CircuitPython, but was still throwing an error anyway. After seeing what it was doing in its code. I narrowed the issue down to the lack of name mangling inside of classes for CircuitPython.
I saw there was already a TODO marked in the MicroPython compiler for it. Albeit from its very first commit to the MicroPython repo, and with no milestone for it.
This isn't a large issue since it can be relatively easily fixed on the Python code itself in most cases. But when trying to figure out where the issue was, I couldn't find any documentation that name mangling did not happen as part of CircuitPython. Which would be useful to have in the event someone else encounters any issue related to name mangling.