Python регистрация правильного имени суперкласса и подкласса - PullRequest
0 голосов
/ 20 марта 2020

Возможно ли в иерархии классов и подклассов для каждого войти в систему со своим именем, например:

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 ()

однако мне не нравится это решение, потому что таким образом каждый класс имеет свое явное имя класса, объявленное во всем коде, и копирование вставки станет утомительным. Есть ли какое-нибудь умное и элегантное решение для вышеупомянутого?

...