整齐地通过多个类传递对象

时间:2016-02-18 13:15:00

标签: python python-2.7 class oop

我有一个日志文件对象,我希望在我的其余代码中无处不在,以便它可以在整个代码中获取注释。我怎样才能将其编码成一个漂亮的OOP格式?

目前我已经在它使用的第一个类中实例化它,然后在它们被实例化时将它传递给其他所有类(我甚至还没有开始考虑尝试手我已经完成了使用课程后的退回。这显然看起来不必要地混乱!

class LogFile(object):

    def __init__(self):
        self.log = []
        pass

    def write_log(self, data):
        self.log.append(data)

class A(object):

    def __init__(self):
        self.logger = LogFile()
        self.do_some_stuff(stuff)

    def do_some_stuff(self, stuff):
        ...
        b = B(self.logger)
        b.do_some_more_stuff(stuff)
        self.logger.write_log(stuff)

class B(object):

    def __init__(self, logger):
        self.logger = logger

    def do_some_more_stuff(self, stuff):
        ...
        ...
        self.logger.write_log(more_stuff)

item = A()
item.do_some_stuff(stuff)

由于

1 个答案:

答案 0 :(得分:0)

虽然我通常不喜欢使用Singletons,但对于像日志这样的事情来说,这是我所知道的最简单的解决方案。

在python中实现它的最简单方法是在模块TableLayout中使用模块级变量:

mylogger.py

在另一个模块中:

class LogFile(object):

    def __init__(self):
        self.log = []
        pass

    def write_log(self, data):
        self.log.append(data)

logger = LogFile()

Python的标准logging module使用from mylogger import logger class A(object): def do_some_stuff(self, stuff): ... logger.write_log(data) 记录器defined as a module-level variable的类似方法。