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