eine Klassenmethode aufrufen
Verfasst: Sonntag 14. März 2021, 23:18
Hallo Gemeinde,
soweit ich es bisher verstanden habe, sollte eine Klassenmethode (@classmethod....) doch
aufrufbar sein, wie jede andere Funktion auch?
Im Codebeispiel unten sollen der Reihe nach die states aus dem dict stateTab_XXX
eingenommen, d.h. dann die eingetragene Funktion ausgeführt werden. Da das im ganzen Programm
nur ein Mal passiert, halte ich erst eine Instanz bilden für entbehrlich. Nur sagt der Interpreter beim Aufruf
in der Funktion doStateChain :
"TypeError: 'classmethod' object is not callable" :
???
VG
joh
soweit ich es bisher verstanden habe, sollte eine Klassenmethode (@classmethod....) doch
aufrufbar sein, wie jede andere Funktion auch?
Im Codebeispiel unten sollen der Reihe nach die states aus dem dict stateTab_XXX
eingenommen, d.h. dann die eingetragene Funktion ausgeführt werden. Da das im ganzen Programm
nur ein Mal passiert, halte ich erst eine Instanz bilden für entbehrlich. Nur sagt der Interpreter beim Aufruf
in der Funktion doStateChain :
"TypeError: 'classmethod' object is not callable" :
Code: Alles auswählen
from time import sleep
dev = 'dev'
###############################################################################
class State():
'''
'''
def __init__(self, name, wsbFkt, param1, next):
self.name = name
self.wsbFkt = wsbFkt
self.param1 = param1
self.next = next
###############################################################################
class StateChain():
"""
"""
state = None
@classmethod
def go(cls):
'''
'''
return True
@classmethod
def wait_ms(cls, ms):
'''
'''
sleep(ms/1000.)
return True
@classmethod
def doNothing(cls):
'''
:return:
'''
print('do nothing')
return
@classmethod
def doStateChain(cls, chain, start):
cls.state = start
while cls.state != 'end':
ch = chain[cls.state]
print(f'{ch.name}') #####
ch.wsbFkt(ch.param1)
cls.state = ch.next
stateTab_XXX = {'st1' : State('st1', wait_ms, (3000,), 'st2'),
'st2' : State('st2', go, (), 'st3'),
'st3' : State('st3', wait_ms, (5000,), 'st4'),
'st4' : State('st4', wait_ms, (1000,), 'end')
}
StateChain.doStateChain(StateChain.stateTab_XXX, 'st1')
???
VG
joh