A long while ago, @filmor created a script that could be used to enable accessing DynamicObjects from Python as a workaround for issue #72 . Since then, this has worked beautifully up to version 3.0.5 and seemed to be a mature solution, even without direct support for DLR types in pythonnet.
With version 3.1.0rc0, this approach stopped working. When trying to access a dynamic property, I get AttributeError: 'Class1' object has no attribute 'SomePropertyFromDynamicObject'. It seems like the injected __getattr__ function is not called.
Python 3.12, pythonnet 3.0.5 - working
Python 3.12, pythonnet 3.1.0rc0 - not working
Python 3.14, pythonnet 3.1.0rc0 - not working
I have attached a C# project and python script to reproduce the issue. Build the C# solution, then run the test_dynamic_access.py script. It tests the DynamicObject-based approach, as well as our own, simplified version of it (that also stopped working).
/edit
So, as a short-term measure, I could adjust the code to only run the workaround for Python 3.14, but I'll investigate whether I can find a solution that works for all versions.
/edit So, as a short-term measure, I could adjust the code to only run the workaround for Python 3.14, but I'll investigate whether I can find a solution that works for all versions.
Just FYI: For us, a fix that only restores the functionality with older Python versions wouldn't really help, because we could just stay on pythonnet 3.0.5, but we need to use Python 3.14 😮💨
Activity
filmor commented on Mar 19, 2026
The problematic commit is 08550d0.
/edit
So, as a short-term measure, I could adjust the code to only run the workaround for Python 3.14, but I'll investigate whether I can find a solution that works for all versions.
spkl commented on Mar 20, 2026
Just FYI: For us, a fix that only restores the functionality with older Python versions wouldn't really help, because we could just stay on pythonnet 3.0.5, but we need to use Python 3.14 😮💨