ログにプレフィックスを追加できるようにするログクラスがあります。プレフィックスが指定されていない場合、デフォルトで ""に設定されます。Python:プロパティが存在するかどうかをチェックする際のAttributeError
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
私はその後、私は接頭辞を設定しようとしている別のクラスのオブジェクトを作成し、別のクラスを、持っている:
class A(PrefixedLog):
def __init__(self, **kwargs):
super(A, self).__init__(**kwargs)
self.b = B()
接頭辞を持つクラス:
class B(PrefixedLog):
self.another_class = AnotherClass()
if self.prefix:
self.another_class.prefix = 'desired prefix'
このエラーが発生します:
AttributeError: 'B' object has no attribute '_prefix'
上の
if self.prefix:
行。
解決策は既に検索されていますが、ほとんどの場合、問題の書式設定と関連があります...タブがないことを確認しました。問題が何であるかについてのアイデアはありますか?前もって感謝します。
また、クラスがプレフィックスを特に設定していない場合でも、接頭辞はデフォルトでエラーなしに行われます。つまり、私が持っているすべてのクラスに戻る必要はありません。プレフィックスを設定します。
のフォールバック値[ 'hasattr']を短縮することができます。この場合、あなたは何のため
hasattr
である属性が存在するかどうかをチェックするかしないかにしたいです(https://docs.python.org/2/library/functions.html?highlight=hasattr#hasattr)'(self、 "_prefix") ' –接頭辞は親のプロパティであるため、superを呼び出す必要はありませんか? – Chris