Python应用程序设计模式-实例必须可用于大多数其他实例
我正在编写相当大和复杂的应用程序,所以我希望坚持设计模式以保持代码的高质量。我有一个实例需要对几乎所有其他实例可用 假设我有BusMonitor实例(用于记录消息的类)和其他使用此实例记录操作的实例,例如Reactor,它解析来自网络协议的传入帧,并根据帧记录不同的消息 我有一个主要实例,创建BusMonitor、Reactor和其他几个实例。 现在我希望Reactor能够使用BusMonitor实例,如何根据设计模式做到这一点 将其设置为反应堆的变量对我来说似乎很难看:Python应用程序设计模式-实例必须可用于大多数其他实例,python,design-patterns,singleton,Python,Design Patterns,Singleton,我正在编写相当大和复杂的应用程序,所以我希望坚持设计模式以保持代码的高质量。我有一个实例需要对几乎所有其他实例可用 假设我有BusMonitor实例(用于记录消息的类)和其他使用此实例记录操作的实例,例如Reactor,它解析来自网络协议的传入帧,并根据帧记录不同的消息 我有一个主要实例,创建BusMonitor、Reactor和其他几个实例。 现在我希望Reactor能够使用BusMonitor实例,如何根据设计模式做到这一点 将其设置为反应堆的变量对我来说似乎很难看: self.\u反应堆设
self.\u反应堆设置\u总线监视器(self.\u总线监视器)
对于需要访问BusMonitor的每个实例,我都会这样做。
导入此实例似乎更糟糕
虽然我可以将BusMonitor设置为Singleton,但我的意思不是作为类而是作为模块,然后导入该模块,但我希望将内容保留在类中以保持一致性
什么方法是最好的
我想在课堂上保持事物的一致性
为什么??为什么一致性很重要(而不是成为一个小精灵)
在有意义的地方使用类。在没有模块的地方使用模块。Python中的类实际上是用于封装数据和保留状态的。如果你没有做这些事情,就不要使用类。否则你就是在与语言作斗争
我想在课堂上保持事物的一致性
为什么??为什么一致性很重要(而不是成为一个小精灵)
在有意义的地方使用类。在没有模块的地方使用模块。Python中的类实际上是用于封装数据和保留状态的。如果你没有做这些事情,就不要使用类。否则,您就是在与该语言作斗争。因为您已经有了一个层次结构,您可以使用一个链来获得它。。这不是问题,但想法是相似的
每个小部件都有一个
getbusmonitor
调用,除了根小部件之外,对于所有小部件都是return self.parent().getbusmonitor()
。您还可以缓存结果。因为您已经有了层次结构,所以可以使用链来获取它。。这不是问题,但想法是相似的
每个小部件都有一个
getbusmonitor
调用,除了根小部件之外,对于所有小部件都是return self.parent().getbusmonitor()
。您还可以缓存结果。我找到了我认为很好的方法。我用BusMonitor类创建了一个模块,在同一个模块中,在类定义之后,我创建了这个类的实例。现在我可以从项目中的任何地方导入它,并使用类和封装保持一致性。我找到了我认为很好的方法。我用BusMonitor类创建了一个模块,在同一个模块中,在类定义之后,我创建了这个类的实例。现在我可以从项目中的任何地方导入它,并使用类和封装保持一致性。将它设置为变量有什么错?为什么你认为这很难看?嗯,我不确定这是否是一个好的方法,它会在未来腐烂吗?或者看看这个例子。我有gui界面的主要实例,它不需要访问busmonitor,这个gui创建了选项卡的实例,选项卡创建了一些更深层次的小部件,然后我们到达了实例需要访问busmonitor的点,现在我必须将busmonitor作为变量从上到下传递给每个实例才能传递它。嗯。。。小部件可以要求父对象给他对象,父对象会要求其父对象等等。这将是一场灾难,通常你不记得它有多少实例深度。它看起来是这样的:self.\u busmonitor=self.parent().parent().parent().parent().busmonitor()
将其设置为变量有什么问题?为什么你认为这很难看?嗯,我不确定这是否是一个好的方法,它会在未来腐烂吗?或者看看这个例子。我有gui界面的主要实例,它不需要访问busmonitor,这个gui创建了选项卡的实例,选项卡创建了一些更深层次的小部件,然后我们到达了实例需要访问busmonitor的点,现在我必须将busmonitor作为变量从上到下传递给每个实例才能传递它。嗯。。。小部件可以要求父对象给他对象,父对象会要求其父对象等等。这将是一场灾难,通常你不记得它有多少实例深度。它看起来是这样的:self.\u busmonitor=self.parent().parent().parent().parent().parent().busmonitor()
,但我正在封装数据。过滤状态、记录的消息和很少的其他内容。当然,我们可以说这不值得,我应该使用模块。然而,这个问题在其他语言中是如何解决的?但我正在封装数据。过滤状态、记录的消息和很少的其他内容。当然,我们可以说这不值得,我应该使用模块。但是,如何用其他语言解决这个问题?