我需要有关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
,在任何情况下都不应该这样。
答案 0 :(得分:1)
已解决。我忘记了return
中臭名昭著的super()
。
代码:
@disableTermDecorator
def readWithSign(self, *args, **kwargs):
return super().readWithSign(*args, **kwargs)