Skip to content

Navigation Menu

Sign in
Appearance settings

Search code, repositories, users, issues, pull requests...

Provide feedback

We read every piece of feedback, and take your input very seriously.

Saved searches

Use saved searches to filter your results more quickly

Sign up
Appearance settings

Commit a50bb54

Browse files
committed
- Moved AbstractExpert
- Changed __init__ in AbstractExpert to abstract method - Added comments
1 parent 58bd201 commit a50bb54

File tree

1 file changed

+29
-17
lines changed

1 file changed

+29
-17
lines changed

‎patterns/other/blackboard.py

Lines changed: 29 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -9,13 +9,27 @@
99
https://en.wikipedia.org/wiki/Blackboard_system
1010
"""
1111

12-
from __future__ import annotations
13-
14-
import abc
12+
from abc import ABC, abstractmethod
1513
import random
1614

15+
class AbstractExpert(ABC):
16+
"""Abstract class for experts in the blackboard system."""
17+
@abstractmethod
18+
def __init__(self, blackboard: object) -> None:
19+
self.blackboard = blackboard
20+
21+
@property
22+
@abstractmethod
23+
def is_eager_to_contribute(self):
24+
raise NotImplementedError("Must provide implementation in subclass.")
25+
26+
@abstractmethod
27+
def contribute(self):
28+
raise NotImplementedError("Must provide implementation in subclass.")
29+
1730

1831
class Blackboard:
32+
"""The blackboard system that holds the common state."""
1933
def __init__(self) -> None:
2034
self.experts = []
2135
self.common_state = {
@@ -30,6 +44,7 @@ def add_expert(self, expert: AbstractExpert) -> None:
3044

3145

3246
class Controller:
47+
"""The controller that manages the blackboard system."""
3348
def __init__(self, blackboard: Blackboard) -> None:
3449
self.blackboard = blackboard
3550

@@ -45,21 +60,11 @@ def run_loop(self):
4560
return self.blackboard.common_state["contributions"]
4661

4762

48-
class AbstractExpert(metaclass=abc.ABCMeta):
49-
def __init__(self, blackboard: Blackboard) -> None:
50-
self.blackboard = blackboard
51-
52-
@property
53-
@abc.abstractmethod
54-
def is_eager_to_contribute(self):
55-
raise NotImplementedError("Must provide implementation in subclass.")
56-
57-
@abc.abstractmethod
58-
def contribute(self):
59-
raise NotImplementedError("Must provide implementation in subclass.")
60-
61-
6263
class Student(AbstractExpert):
64+
"""Concrete class for a student expert."""
65+
def __init__(self, blackboard) -> None:
66+
super().__init__(blackboard)
67+
6368
@property
6469
def is_eager_to_contribute(self) -> bool:
6570
return True
@@ -72,6 +77,10 @@ def contribute(self) -> None:
7277

7378

7479
class Scientist(AbstractExpert):
80+
"""Concrete class for a scientist expert."""
81+
def __init__(self, blackboard) -> None:
82+
super().__init__(blackboard)
83+
7584
@property
7685
def is_eager_to_contribute(self) -> int:
7786
return random.randint(0, 1)
@@ -84,6 +93,9 @@ def contribute(self) -> None:
8493

8594

8695
class Professor(AbstractExpert):
96+
def __init__(self, blackboard) -> None:
97+
super().__init__(blackboard)
98+
8799
@property
88100
def is_eager_to_contribute(self) -> bool:
89101
return True if self.blackboard.common_state["problems"] > 100 else False

0 commit comments

Comments
(0)

AltStyle によって変換されたページ (->オリジナル) /