Основной код запущен, но другой код не выполняется

#python #oop #logging #design-patterns #singleton

#python #ооп #ведение журнала #шаблоны проектирования #синглтон

Вопрос:

Я изучаю шаблон проектирования на python, и предметом являются одноэлементные объекты, поэтому я писал свой основной код как PRO003 и импортировал его PRO004 . Это PRO003 код:

 class SingletonObject(object):
    class __SingletonObject:
        def __init__(self):
            self.name = None

        def __str__(self):
            return '{0!r} {1}'.format(self, self.name)

        def _write_log(self, level, msg):
            with open(self.name, 'a') as log_file:
                log_file.write('[{0}] -> {1}n'.format(level, msg))

        def critical(self, msg):
            self._write_log('CRITICAL', msg)

        def error(self, msg):
            self._write_log('ERROR', msg)

        def warning(self, msg):
            self._write_log('WARNING', msg)

        def info(self, msg):
            self._write_log('INFO', msg)

        def debug(self, msg):
            self._write_log('DEBUG', msg)

    instance = None

    def __new__(cls, *args, **kwargs):
        if not SingletonObject.instance:
            SingletonObject.instance = SingletonObject.__SingletonObject
        return SingletonObject.instance

    def __getattr__(self, name):
        return getattr(self.instance, name)

    def __setattr__(self, name):
        return setattr(self.instance, name)
 

И это PRO004 код:

 from PRO003 import SingletonObject

obj1 = SingletonObject()
obj1.name = 'logger.txt'
obj1.error('This Code Have An Error')
print('File Name: ', obj1.name, 'Object Location: ', obj1)

obj2 = SingletonObject()
obj2.name = 'logger.txt'
obj2.warning('Be Careful About This Bug')
print('File Name: ', obj2.name, 'Object Location: ', obj2)
 

Но это результат:

 Traceback (most recent call last):
  File "D:PYTHON PROJECTSLEARNDesignPatternsS01PRO004.py", line 5, in <module>
    obj1.error('This Code Have An Error')
TypeError: error() missing 1 required positional argument: 'msg'
[Finished in 0.097s]
 

Я думаю, что этот код нужен self , но self не выдается, и он по классу, и он не должен вводиться это моя идея, но я больше ничего не знаю!
В чем проблема этого кода?

Комментарии:

1. измените SingletonObject.instance = SingletonObject . __SingletonObject в SingletonObject.instance = SingletonObject . __SingletonObject()

Ответ №1:

Класс __SingletonObject не создается

 SingletonObject.instance = SingletonObject.__SingletonObject
 

изменить на

 SingletonObject.instance = SingletonObject.__SingletonObject()