Return class instance from COM method in Python

P

Paul

Hi

I'm implementing a few COM classes using Python. I've come across a
problem when I'm trying the return an instance of a class from a
method on one of my classes. The code is as follows, with two classes
- clsDividend and clsDividendEsimate. The
clsDividend.GetDividendEstimates method tries to return a new instance
of the clsDividendEstimate class, but throws an error.

Any ideas what I'm doing wrong - is it possible to do what I'm trying
to achieve?

The client will ultimately be Excel, but I can't even get it to work
within a Python client yet. Ultimately I'd like to do this in my
client(pseudo):

oDiv = CreateObject("SBLFront.clsDividend")
oDivEst = oDiv.GetDividendEstimates("testval")
msgbox oDivEst.ccy

Many thanks
Paul

# Expose the Python SBLFront.
class clsDividend(clsSBLFront):
"""The SBLFront object exposed via COM
"""
#_reg_clsctx_ = pythoncom.CLSCTX_LOCAL_SERVER
_public_methods_ = ['GetDividendEstimates']
_public_methods_.extend(clsSBLFront._public_methods_)

# All registration stuff to support fully automatic
register/unregister
_reg_verprogid_ = "SBLFront.clsDividend.1"
_reg_progid_ = "SBLFront.clsDividend"
_reg_desc_ = "Python SBLFront"
_reg_clsid_ = "{2E851A1B-A8D1-4AD5-BA16-EB6B9BCF2F21}"
_reg_class_spec_ = "win32com.servers.sblfront.clsDividend"

# ------------------------------------------------------------------------

def __init__(self):
clsSBLFront.__init__(self)
self.dict = {}

def GetDividendEstimates(self, InsId):
oDivEst = clsDividendEstimate('USD', 1.0, 1.0,
'2003-01-01','2003-01-01','2003-01-01','Test description')
return oDivEst

# ----------------------------------------------------------------------------

class clsDividendEstimate:
"""The SBLFront object exposed via COM
"""
_public_methods_ = []
_public_attrs_ = ['ccy', 'dividend', 'tax_factor', 'pay_day',
'ex_div_day', 'day', 'description']
_readonly_attrs_ = ['ccy', 'dividend', 'tax_factor', 'pay_day',
'ex_div_day', 'day', 'description']

# All registration stuff to support fully automatic
register/unregister
_reg_verprogid_ = "SBLFront.clsDividendEstimate.1"
_reg_progid_ = "SBLFront.clsDividendEstimate"
_reg_desc_ = "Python SBLFront"
_reg_clsid_ = "{055DEFBC-B095-4C5B-A9CE-BFBB965BBDC1}"
_reg_class_spec_ = "win32com.servers.sblfront.clsDividendEstimate"

# ------------------------------------------------------------------------

def __init__(self):
self.dict = {}
self.ccy = ''
self.dividend = 0.0
self.tax_factor = 0.0
self.pay_day = ''
self.ex_div_day = ''
self.day = ''
self.description = ''

def __init__(self, sCCY, dDiv, dTax, dtDay, dtPayDay, dtExDivDay,
sDesc):
self.dict = {}
self.ccy = sCCY
self.dividend = dDiv
self.tax_factor = dTax
self.pay_day = dtPayDay
self.ex_div_day = dtExDivDay
self.day = dtDay
self.description = sDesc
 
P

Paul

I managed to solve my own problem - it didn't like having two __init__
methods (different prototypes).

However, I have another problem. I've worked out how to return a
list, and also how to return an instance of a class. I know need to
be able to return a list of objects. Is this possible (no luck so
far)?

Paul

Hi

I'm implementing a few COM classes using Python. I've come across a
problem when I'm trying the return an instance of a class from a
method on one of my classes. The code is as follows, with two classes
- clsDividend and clsDividendEsimate. The
clsDividend.GetDividendEstimates method tries to return a new instance
of the clsDividendEstimate class, but throws an error.

Any ideas what I'm doing wrong - is it possible to do what I'm trying
to achieve?

The client will ultimately be Excel, but I can't even get it to work
within a Python client yet. Ultimately I'd like to do this in my
client(pseudo):

oDiv = CreateObject("SBLFront.clsDividend")
oDivEst = oDiv.GetDividendEstimates("testval")
msgbox oDivEst.ccy

Many thanks
Paul

# Expose the Python SBLFront.
class clsDividend(clsSBLFront):
"""The SBLFront object exposed via COM
"""
#_reg_clsctx_ = pythoncom.CLSCTX_LOCAL_SERVER
_public_methods_ = ['GetDividendEstimates']
_public_methods_.extend(clsSBLFront._public_methods_)

# All registration stuff to support fully automatic
register/unregister
_reg_verprogid_ = "SBLFront.clsDividend.1"
_reg_progid_ = "SBLFront.clsDividend"
_reg_desc_ = "Python SBLFront"
_reg_clsid_ = "{2E851A1B-A8D1-4AD5-BA16-EB6B9BCF2F21}"
_reg_class_spec_ = "win32com.servers.sblfront.clsDividend"

# ------------------------------------------------------------------------

def __init__(self):
clsSBLFront.__init__(self)
self.dict = {}

def GetDividendEstimates(self, InsId):
oDivEst = clsDividendEstimate('USD', 1.0, 1.0,
'2003-01-01','2003-01-01','2003-01-01','Test description')
return oDivEst

# ----------------------------------------------------------------------------

class clsDividendEstimate:
"""The SBLFront object exposed via COM
"""
_public_methods_ = []
_public_attrs_ = ['ccy', 'dividend', 'tax_factor', 'pay_day',
'ex_div_day', 'day', 'description']
_readonly_attrs_ = ['ccy', 'dividend', 'tax_factor', 'pay_day',
'ex_div_day', 'day', 'description']

# All registration stuff to support fully automatic
register/unregister
_reg_verprogid_ = "SBLFront.clsDividendEstimate.1"
_reg_progid_ = "SBLFront.clsDividendEstimate"
_reg_desc_ = "Python SBLFront"
_reg_clsid_ = "{055DEFBC-B095-4C5B-A9CE-BFBB965BBDC1}"
_reg_class_spec_ = "win32com.servers.sblfront.clsDividendEstimate"

# ------------------------------------------------------------------------

def __init__(self):
self.dict = {}
self.ccy = ''
self.dividend = 0.0
self.tax_factor = 0.0
self.pay_day = ''
self.ex_div_day = ''
self.day = ''
self.description = ''

def __init__(self, sCCY, dDiv, dTax, dtDay, dtPayDay, dtExDivDay,
sDesc):
self.dict = {}
self.ccy = sCCY
self.dividend = dDiv
self.tax_factor = dTax
self.pay_day = dtPayDay
self.ex_div_day = dtExDivDay
self.day = dtDay
self.description = sDesc
 

Ask a Question

Want to reply to this thread or ask your own question?

You'll need to choose a username for the site, which only take a couple of moments. After that, you can post your question and our members will help you out.

Ask a Question

Members online

No members online now.

Forum statistics

Threads
473,769
Messages
2,569,582
Members
45,065
Latest member
OrderGreenAcreCBD

Latest Threads

Top