Безопасно ли превратить класс старого стиля в класс нового стиля, используя множественное наследование? - PullRequest
7 голосов
/ 03 ноября 2008

В программе, которую я пишу, я хотел создать ConfigParser, предназначенный только для чтения, чтобы его можно было безопасно использовать во всем мире. Я не осознавал этого, но, очевидно, SafeConfigParser - это класс старого стиля, поэтому мне пришлось разделить его на подклассы следующим образом:

class ConstParser(SafeConfigParser, object):
     """This is a implementation of the SafeConfigParser that can't
        write any values.  This is to ensure that it can only be filled
        once and won't get messy with multiple modules writing to it."""
    def __init__(self, files, defaults={}):
        super(ConstParser, self).__init__(defaults)
        self.read(files)
    def set(self, *args, **argd):
        raise NotImplementedError()
    def write(self, *args, **argd):
        raise NotImplementedError()
    def remove_option(self, *args, **argd):
        raise NotImplementedError()
    def remove_section(self, *args, **argd):
        raise NotImplementedError()

Если я не использовал объект в качестве миксина, вызов метода SafeConfigParser __init__ не сработал. Теперь я уверен, что есть лучшие способы сделать то, что я хочу, но теперь мне любопытно: нормально ли это вообще?

Я имею в виду, я не могу думать ни о какой причине, почему это было бы плохо, но это все равно вызывает у меня плохие чувства. Они оправданы или я просто параноик?

1 Ответ

2 голосов
/ 03 ноября 2008

Заменить звонок:

super(ConstParser, self).__init__(defaults)

с:

SafeConfigParser.__init__(self, defaults)

и он отлично работает без множественного наследования.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...