Rafał Łużyński
Rafał Łużyński

Reputation: 7312

Python app design patterns - instance must be available for most other instances

I'm writing pretty big and complex application, so I want to stick to design patterns to keep code in good quality. I have problem with one instance that needs to be available for almost all other instances.

Lets say I have instance of BusMonitor (class for logging messages) and other instances that use this instance for logging actions, in example Reactor that parses incoming frames from network protocol and depending on frame it logs different messages.

I have one main instance that creates BusMonitor, Reactor and few more instances. Now I want Reactor to be able to use BusMonitor instance, how can I do that according to design patterns?

Setting it as a variable for Reactor seems ugly for me: self._reactor.set_busmonitor(self._busmonitor)

I would do that for every instance that needs access to BusMonitor. Importing this instance seems even worse.

Altough I can make BusMonitor as Singleton, I mean not as Class but as Module and then import this module but I want to keep things in classes to retain consistency.

What approach would be the best?

Upvotes: 0

Views: 127

Answers (3)

Rafał Łużyński
Rafał Łużyński

Reputation: 7312

I found good way I think. I made module with class BusMonitor, and in the same module, after class definition I make instance of this class. Now I can import it from everywhere in project and I retain consistency using classes and encapsulation.

Upvotes: 0

Karoly Horvath
Karoly Horvath

Reputation: 96266

As you already have a hierarchy, you could use a chain to get it.. it's not the Chain-of-responsibility pattern, but the idea is similar.

Each widget has a getbusmonitor call, which is return self.parent().getbusmonitor() for all widgets except the root one. You could also cache the results..

Upvotes: 1

Daniel Roseman
Daniel Roseman

Reputation: 599638

I want to keep things in classes to retain consistency

Why? Why is consistency important (other than being a hobgoblin of little minds)?

Use classes where they make sense. Use modules where they don't. Classes in Python are really for encapsulating data and retaining state. If you're not doing those things, don't use classes. Otherwise you're fighting against the language.

Upvotes: 3

Related Questions