Return class instance from COM method in Python

Paul paul.kemp at standardbank.com
Mon Oct 20 12:04:25 EDT 2003


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




More information about the Python-list mailing list