Closed
Description
Environment
- Pythonnet version: 3.0.0-rc4
- Python version: 3.8
- Operating System: Windows11
- .NET Runtime: .NET Framework 4.8
Details
With the following code in C#, when a Python class has getitem() defined, it will be converted to an array (System.Object[]) in managed code:
List lst = new List();
using (Py.GIL())
{
using (var scope = Py.CreateScope())
{
scope.Set("lst", lst);
string text = @"
class DBRow:
def init(self, row, col_names):
self.row = row
self.col_names = col_names
def __getitem__(self, key):
if isinstance(key, int):
return self.row[key]
if key in self.col_names:
index = self.col_names.index(key)
return self.row[index]
else:
return None
col_names=['col1', 'col2', 'col3']
row=[1, '2', 3]
r = DBRow(row, col_names)
lst.Add(r)
";
var code = PythonEngine.Compile(text);
scope.Execute(code);
}
}
string str = lst[0].GetType().ToString();
Metadata
Metadata
Assignees
Labels
No labels
Activity
lostmsu commentedon Aug 8, 2022
Can you clarify? The bug is that
strvariable ends up beingSystem.Object[], and you expect it to bePyObject?BREAKING: disabled implicit conversion from Python objects implementi…
BREAKING: disabled implicit conversion from Python objects implementi…
Tiehong commentedon Aug 9, 2022
Yes, @lostmsu. I expect it to be PyObject. Then I can view the class members/properties in the C# world. System.Object[] does not allow me to do that.
lostmsu commentedon Sep 16, 2022
I believe this should be fixed now.