Thanks to visit codestin.com
Credit goes to github.com

Skip to content

Class Name Mangling Not Implemented/Missing Documentation for Lack of Implementation #8243

@trwbox

Description

@trwbox

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.

Metadata

Metadata

Assignees

No one assigned

    Type

    No type

    Projects

    No projects

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions