Создание объекта класса для глобального использования в Python - PullRequest
0 голосов
/ 04 августа 2020

Я написал модуль ниже, который стандартизирует то, как пишутся мои файлы журнала, а также легко меняет, будут ли события печататься / записываться в файл журнала или нет.

FILE: Logging.py
================
import os
import datetime
import io

class Logfile():
        
    
    def __init__(self,name):
        self.logFile = os.getcwd() + r'\.Log\\' + name + '_' + str(datetime.date.today().year) + ('00' + str(datetime.date.today().month))[-2:] + '.log'
        self.printLog = False
        self.debug = False
        
    # Setup logFile and consolidated Folder
        if not os.path.exists(os.path.dirname(self.logFile)):
            os.mkdir(os.path.dirname(self.logFile))
        #Check if logfile exists.
        if not os.path.exists(self.logFile):
            with open(self.logFile, 'w') as l:
                pass
        

    # Write LogFile Entry
    def logEvent(self, eventText, debugOnly): # Function to add an event to the logfile
        # If this is marked as debugging only AND debugging is off
        if debugOnly == True and self.debug == False:
            return
        if self.printLog == True:
            print(datetime.datetime.strftime(datetime.datetime.now(), '%m/%d/%Y, %I:%M:%S %p, ') + str(eventText))
        with open(self.logFile, 'a') as l:
            l.seek(0)
            l.write(datetime.datetime.strftime(datetime.datetime.now(), '%m/%d/%Y, %I:%M:%S %p, ') + str(eventText) + '\n')
            return

Это очень удобно, но я не понимаю, как сделать это доступным для всех моих классов. Например, если я импортирую следующий модуль, я не уверен, как использовать файл журнала, созданный в моем основном сценарии.

FILE: HelloWorld.py
===================
class HelloWorld():
    def __init__(self):
        log.logEvent('You have created a HelloWorld Object!', False)

Здесь основной сценарий:

import Logging
from HelloWorld import HelloWorld

log = logging.Logfile
hw = HelloWorld()

^^ Не получится, потому что он не знает, что журнал это вещь. Как правильно поступать в подобных ситуациях?

Ответы [ 2 ]

1 голос
/ 04 августа 2020

Я полагаю, вы пытаетесь сделать что-то подобное. (и в качестве примечания, вы можете изучить использование модуля ведения журнала по умолчанию для pythons)

FILE: HelloWorld.py
===================
# import LogFile
from .Logging import LogFile
# create new LogFile instance
log = LogFile(name='log name')

class HelloWorld():
    def __init__(self):
        # call logEvent method on your LogFile instance
        log.logEvent('You have created a HelloWorld Object!', False)


FILE: Main.py
===================
# import HelloWorld
from .HellowWorld import HellowWorld
# create new HellowWorld instance
hw = HellowWorld()

Кроме того, для создания модуля вам нужно будет добавить файл __init__.py в этот каталог.

0 голосов
/ 04 августа 2020

Эта проблема легко решается с помощью встроенного модуля «Логирование». В ответ на более широкий вопрос «как использовать объект (журнал) во всех моих модулях», я предполагаю, что ответ на него можно найти, прочитав код в модуле ведения журнала и имитируя его.

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