Ich habe dieses Problem, das ziemlich komisch aussieht ... also vielleicht bekomme ich nur die ganze Sache falsch - in diesem Fall, bitte, lass es mich wissen.Vererben aufrufbare Objekte mit verschiedenen Argumenten
Ich habe eine Basisklasse, die __call__
Methode implementiert. Diese Methode hat einige Vorverarbeitung, dann eine abstrakte _call()
Methode aufruft und hat einige Nachbearbeitung, wie folgt aus:
class BaseCallable(object):
__metaclass__ = abc.ABCMeta
@abc.abstractmethod
def _call(self, *args, **kwargs):
pass
def __call__(self, *args, *kwargs):
# do some pre-processing
result = self._call(*args, **kwargs)
# do some post-processing
return result
ich die Basis aufrufbare Objekt in der Lage sein möchte, Unterklasse eine call()
Methode hinzufügen, mit einem richtiger Docstring, der verschiedene Argumente akzeptiert und dann springt auf __call__
. Ich habe einige Probleme, wie ich auch die Unterschrift der konkreten Umsetzung der _call()
, zB ändern sollte:
class Sum(BaseCallable):
def _call(self, x, y):
return x + y
def call(self, x, y):
"""Docstring."""
return super(Sum, self).__call__(x, y)
ich so tat, und da pylint
klagt:
[pylint] W0221:Parameters differ from overridden '_call' method
Ich nehme an, es ist etwas, fischig geht weiter. Irgendwelche Vorschläge für ein besseres Design? Vielleicht sollte ich die _call()
und __call__()
Methoden beschränken, nur **kwargs
zu akzeptieren? Danke im Voraus!
Beklagt es sich darüber, dass es nicht 'def call (self, x, y) ist:'? –
@SimeonVisser Entschuldigung, ich habe in Copy & Paste versaut. Wie auch immer, nein, es klagt wegen unterschiedlicher Argumente. Ich werde die Fehlermeldung posten. – petrux
bedeutet dieser Fehler nicht nur "Ihre Parameter sind jetzt' x, y' statt '* args, ** kwars' also ist es nicht auf die gleiche Weise abrufbar" Ich denke, es warnt Sie, dass Sie eine Einschränkung gemacht haben vollständig beabsichtigt zu. –