Ich habe eine Protokollierungsklasse, die das Hinzufügen eines Präfixes zu den Protokollen ermöglicht. Wenn kein Präfix angegeben ist, sollte standardmäßig "" angegeben werden.Python: AttributeError beim Überprüfen, ob Eigenschaften vorhanden sind
class PrefixedLog(Loggable):
def __init__(self):
self._prefix = None
@property
def prefix(self):
if self._prefix:
return self._prefix
else:
return ""
@prefix.setter
def prefix(self, value):
self._prefix = value
@property
def log(self):
if not hasattr(self, '_log') or not self._log:
log = logging.getLogger(self.__class__.__name__)
self._log = LoggerAdapter(self._prefix, log)
return self._log
Ich habe eine andere Klasse, die dann ein Objekt einer anderen Klasse erstellt, wo ich versuche, das Präfix zu setzen:
class A(PrefixedLog):
def __init__(self, **kwargs):
super(A, self).__init__(**kwargs)
self.b = B()
Die Klasse mit dem Präfix:
class B(PrefixedLog):
self.another_class = AnotherClass()
if self.prefix:
self.another_class.prefix = 'desired prefix'
Ich erhalte diesen Fehler:
AttributeError: 'B' object has no attribute '_prefix'
auf dem
if self.prefix:
Linie.
Ich habe schon nach Lösungen gesucht, aber die meisten hatten mit Formatierungsproblemen zu tun ... Ich habe sichergestellt, dass es keine Tabs gibt. Irgendwelche Ideen, was das Problem sein könnte? Danke im Voraus.
Auch - ich möchte sicherstellen, dass auch wenn eine Klasse nicht speziell ein Präfix setzt, dann das Präfix standardmäßig "" ohne Fehler, dh ich muss nicht zurück zu jeder Klasse, die ich habe und setze das Präfix.
[ 'hasattr'] (https://docs.python.org/2/library/functions.html?highlight=hasattr#hasattr)((self, "_prefix") ' –
Müssen Sie nicht super aufrufen, da das Präfix eine Eigenschaft des Elternteils ist ? – Chris