Мне нужна помощь относительно метода super ().Рассмотрим пример:
class A:
def subMethod(self):
return "a"
def callMe(self):
print(self.subMethod())
class B(A):
def subMethod(self):
return "b"
def callMe(self):
print("Look at me")
super().callMe()
Теперь, если я позвоню B.callMe()
, он напечатает a
.Я хочу напечатать b
Как я могу решить эту проблему?Возможно ли это?
Что касается деталей, я использую этот код на платформе MicroPython, поэтому я ограничен в использовании некоторых высокоуровневых библиотек, поскольку он содержит только пару стандартных библиотек.
Вот реальный пример:
class UARTbase():
def readLine(self):
pass
def readWithSign(self):
c = self.readLine()
self.printDebug("raw")
self.printDebug(c)
c = c.decode()
self.printDebug("decoded")
self.printDebug(c)
self.writeNoAck(c)
return c
class UARTesp(UARTbase):
def disableTermDecorator(func):
def aFunc(self, *args, **kwargs):
return_value = None
if(self.__term_count == 0):
uos.dupterm(None, 1)
self.getUart().init(timeout=self.TIMEOUT)
self.__term_count = self.__term_count + 1
try:
return_value = func(self, *args, **kwargs)
except Exception as e:
self.printDebug("Error in wrapper")
self.printDebug(e)
self.__term_count = self.__term_count - 1
if(self.__term_count == 0):
self.getUart().init(timeout=0)
uos.dupterm(self.getUart(), 1)
return return_value
gc.collect()
return aFunc
@disableTermDecorator
def readLine(self, *args, **kwargs):
c = self.getUart().readline()
if(c is not None):
return c[:-2]
# for compatibilty
return b''
@disableTermDecorator
def readWithSign(self, *args, **kwargs):
super().readWithSign(*args, **kwargs)
Как видите, мне нужно вызывать только super, поэтому я могу обернуть методы этим конкретным декоратором.
Когда я вызываю super().readWithSign()
говорит, что c
- это None
, чего не должно быть, в любом случае.