Возможно ли в иерархии классов и подклассов для каждого войти в систему со своим именем, например:
import logging
class Super(object):
def __init__(self):
logging.basicConfig()
self.name = "Super"
self.log = logging.getLogger(self.name)
self.log.error("__init()__")
def bar(self):
self.log.error("bar()")
class Sub(Super):
def __init__(self):
super(Sub, self).__init__()
logging.basicConfig()
self.name = "Sub"
self.log = logging.getLogger(self.name)
self.log.error("__init()__")
def foo(self):
self.log.error("foo()")
super(Sub, self).bar()
if __name__ == "__main__":
sub = Sub()
sub.foo()
В настоящее время журналы:
ERROR:Super:__init()__
ERROR:Sub:__init()__
ERROR:Sub:foo()
ERROR:Sub:bar() <-- notice the Sub!
, в то время как я хотел бы это для записи:
ERROR:Super:__init()__
ERROR:Sub:__init()__
ERROR:Sub:foo()
ERROR:Super:bar() <-- notice the Super!!
Единственное решение, которое я нашел на данный момент, - это объявить log как атрибут класса и регистрироваться каждый раз с добавленным именем класса:
Super.log.error ()
однако мне не нравится это решение, потому что таким образом каждый класс имеет свое явное имя класса, объявленное во всем коде, и копирование вставки станет утомительным. Есть ли какое-нибудь умное и элегантное решение для вышеупомянутого?