/// <summary> /// Set an attribute value /// </summary> /// <typeparam name="T"></typeparam> /// <param name="attribute"></param> /// <param name="value"></param> /// <returns></returns> public bool SetAttribute <T>(string attribute, T value) { var pyValue = PySharp.PyZero; var oValue = (object)value; if (value is PyObject) { pyValue = (PyObject)oValue; } // Only allow type conversions if we have a PySharp object reference if (_pySharp != null) { if (oValue is bool) { pyValue = _pySharp.From((bool)oValue); } if (oValue is int) { pyValue = _pySharp.From((int)oValue); } if (oValue is long) { pyValue = _pySharp.From((long)oValue); } if (oValue is float) { pyValue = _pySharp.From((float)oValue); } if (oValue is double) { pyValue = _pySharp.From((double)oValue); } if (oValue is string) { pyValue = _pySharp.From((string)oValue); } if (oValue is IEnumerable <PyObject> ) { pyValue = _pySharp.From((IEnumerable <PyObject>)oValue); } if (oValue is IEnumerable <int> ) { pyValue = _pySharp.From((IEnumerable <int>)oValue); } if (oValue is IEnumerable <long> ) { pyValue = _pySharp.From((IEnumerable <long>)oValue); } if (oValue is IEnumerable <float> ) { pyValue = _pySharp.From((IEnumerable <float>)oValue); } if (oValue is IEnumerable <double> ) { pyValue = _pySharp.From((IEnumerable <double>)oValue); } if (oValue is IEnumerable <string> ) { pyValue = _pySharp.From((IEnumerable <string>)oValue); } } try { if (IsValid && !pyValue.IsNull) { return(Py.PyObject_SetAttrString(this, attribute, pyValue) != -1); } return(false); } finally { HandlePythonError(); } }