Rafe schrieb:
On Aug 15, 10:27 pm, Wolfgang Grafen <[EMAIL PROTECTED]>
wrote:
Rafe schrieb:
Now if I try to pass this as I would a string, roughly like so...
s = StrLike("test")
Application.AnObject.attribute = "test" # works fine
Application.AnObject.attribute = s
ERROR : Traceback (most recent call last):
File "<Script Block >", line 18, in <module>
XSI.Selection[0].name = s
File "C:\Python25\Lib\site-packages\win32com\client\dynamic.py",
line 544, in __setattr__
self._oleobj_.Invoke(entry.dispid, 0, invoke_type, 0, value)
TypeError: Objects of type 'StrLike' can not be converted to a COM
VARIANT
Inheriting the str type doesn't raise any errors, but it's immutible
so it won't work. The attribute I am trying to set in XSI only takes a
string. So is it possible to make a string like object work like a
string in this scenario? Is there some built-in method I am missing or
some win32com.client trick? Help?
Thanks for reading,
- Rafe
Add
def __str__(self): return repr(self.__data)
then
>>> Application.AnObject.attribute = str(s)
should work
untested
Best Regards
Wolfgang
Thanks for the reply.
I don't need __str__ because Python will automatically use __repr__
when __str__ isn't defined anyway. I also don't want people to have to
wrap this in str().
While str() does work, the real problem is usability. The user will
have to try it, decrypt the "can not be converted" error message and
then figure out on their own that they have to use str(). It will be
intuitive/expected to work especially when used within the context of
the XSI(application) SDK.
Surely there is a way to get my object to be == a string in the eyes
of COM.
Nope. There is no automatic type casting. You have to write a function
for this
for the '.attribute' method, or you have to use str() which is quite
useable and comprehensive IMO.
Wolfgang
--
http://mail.python.org/mailman/listinfo/python-list