【问题标题】:Pass class instances to other classes (or use global classes) in Python将类实例传递给 Python 中的其他类(或使用全局类)
【发布时间】:2018-11-06 09:22:08
【问题描述】:

我有一些全局类,这意味着我将它们用于任何其他类。

实际上我是这样做的:

class Log():
    def __init__(self):
        self.logs = []

    def log(self, msg):
        self.logs.append(msg)

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

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

class MyMain():
    def __init__(self):
        self.logger = Log()
        self.a = A(self.logger)
        self.b = B(self.logger)

我想知道是否有一种更优雅的方法可以在所有子模块上使用这样的类。我搜索了很多来寻找这个问题的解决方案,但我对答案感到困惑。 有没有这方面的最佳实践..?

谢谢, 托尼。

【问题讨论】:

  • 不是一个正确的答案,但 Python 的 stdlib 中已经有一个相当复杂的日志记录包,根据经验,你自己不会有更好的东西。
  • 更一般的答案:您希望每个模块都有自己的Log 实例,还是您想要一个用于整个过程的Log 实例,还是您有更确切的要求?
  • 记录只是一个例子。我正在创建的课程会做得更多..
  • 好的,但这不能回答我的第二个问题。

标签: python python-3.x class design-patterns


【解决方案1】:

感谢您的回答。

您对 global var 的回答使我得出以下结果。 我会将它用作内置类,因为它将在多个模块中使用。

所以这对我有用:

class Log():
    def __init__(self):
        self.logs = []

    def log(self, msg):
        self.logs.append(msg)

class A():
    def __init__(self):
        sc.log("test")

class MyMain():
    def __init__(self):
        builtins.sc = Log()
        self.a = A()

谢谢。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-03-21
    • 2011-06-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多