inheritance and how to use it

Bob Brusa bob.brusa at gmail.com
Fri Feb 15 20:40:32 CET 2013


Am 15.02.2013 19:06, schrieb Dave Angel:
> On 02/15/2013 12:50 PM, Bob Brusa wrote:
>> Am 15.02.2013 18:06, schrieb Thomas Rachel:
>>> Am 15.02.2013 17:59 schrieb Bob Brusa:
>>>> Hi,
>>>> I use a module downloaded from the net. Now I want to build my own
>>>> class, based on the class SerialInstrument offered in this module - and
>>>> in my class I would like to initialize a few things, using e. g. the
>>>> method clear() offered by SerialInstrument. Hence I type:
>>>>
>>>> class myClass(SerialInstrument)
>>>>      self.clear(self)
>>>>      def f1(self, str1, str2)
>>>>          ...do something etc.
>>>>
>>>> I then get the message "self not know" from the statement
>>>> self.clear(self).
>>>
>>> Which is absolutely correct. Besides, I would have expected some syntax
>>> errors.
>>>
>>> You try to execute the clear() method during the definition of the
>>> class, not during the instantiation.
>>>
>>> Instantiation happens in the __init__() method.
>>>
>>> You'll have to do it like this:
>>>
>>> class myClass(SerialInstrument):
>>>      def __init__(self, *a, **k): # accept all parameters
>>>          super(myClass, self).__init__(*a, **k)
>>>          self.clear() # I don't think that self is to be given twice
>>> here...
>>>      def f1(self, str1, str2):
>>>          pass
>>>
>>> I have tried many other notations - none worked. What
>>>> works is however the following code - specifying myClass without the
>>>> self.clear(self) in it:
>>>>
>>>> x = myClass("argument")
>>>> x.clear()
>>>
>>> Here the clear() is called on the object which has been created, so
>>> after calling the __init__() above (which is, roughly, equivalent to
>>> calling it at the bottom of __init__()).
>>>
>>>
>>> Thomas
>>
>> Thomas,
>> This does not work either. The error comes while python analyses the
>> code - even prior to executing my program.... But what I want to achieve
>> is that this clear() is executed when the class is instantiated....which
>> I do with the code
>>
>> x = myClass("COM7")
>>
>> Of course, when scanning the class definition, the argument "COM7" is
>> not yet known.
>> Thanks for further help. Bob
>>
>
> Your error is on line 115, so what does it look like, and its context? I
> expect you're never getting to the line x = myClass().
>
Hi Dave and Thomas,
yep - now its working: See also attachment q4.py

C:\Projekte\TDSsw\mypython>python q4.py
start of program q4.py
->*idn? | "SPEAG","TDS","RUID:00.00-00.00 FW:2.0000 SID:00.00-00.00 
FW:01.00.00"
end of program

Thanks for your kind help - bob
-------------- next part --------------
"""/
edit history:
15-02-2013  Creation
"""

import sys
import visa
import time


class myvisa(visa.SerialInstrument):
    """provide utilities to handle the instrument
    """
    def __init__(self, addr): # accept all parameters
        super(myvisa, self).__init__(addr, baud_rate = 57600)
        self.clear() # Thomas does not think that self is to be given twice
        # he is right!

    def io (self, printstr, askstr):
        """combines a print and an ask-string into a single call
        """
        res = 0
        try:
            antw = self.ask(askstr)
        except:
            antw = "time-out"
            res = 1
        print printstr + antw
        return res

strich = " | "; pfeil = "->"
print "start of program q4.py"
iodev = "COM7"
tds = myvisa(iodev)
cmd = "*idn?"; tds.io(pfeil+cmd+strich,cmd)
cmd = "status?"; tds.write(cmd)     # exit with something in the visa-buffer and this will
                                    # lead to a de-chronization between write and reads when 
                                    # executing a next program
print "end of program"



More information about the Python-list mailing list