У меня есть 5 классов, как показано ниже. Выполнение начинается с класса 5. Здесь внедрение зависимостей используется, когда объект слушателя передается в конструктор класса Bot
, а затем этот объект вызывает метод listen (). Эта часть в порядке.
Проблема начинается с этого момента.
Из метода listen()
я вызываю другой метод с именем process()
, который находится в классе Processor
(файл processor.py
). Затем метод process()
вызывает два других метода из 2 разных классов Tokenizer
и Core
.
Как вы можете видеть, все они связаны, и внедрение зависимостей здесь не используется. Я не уверен, как это сделать.
Я опробовал примеры пакетов python dependency-injector
и pinject
, но эти примеры касаются одноуровневых зависимостей, а не случаев, подобных этому, насколько я могу. понять.
Я думал о создании всех необходимых объектов в одном модуле и передаче его в качестве параметров всем классам, когда это необходимо. Но это не похоже на хорошую практику.
Что я могу сделать, чтобы отделить код выше? Как мне go о модульности этого?
# core.py
class Core:
def decide(self, data):
""" Makes decisions based on input data """
# blah blah
-
# tokenizer.py
import nltk
from nltk.corpus import stopwords
from nltk.tokenize import word_tokenize
stoplist = set(stopwords.words('english'))
class Tokenizer:
def tokenize(self, query):
""" Tokenize the input query string """
tokenized_query = word_tokenize(query)
clean_query = [w for w in tokenized_query if not w in stoplist]
return clean_query
-
# processor.py
import tokenizer
import core
class Processor:
def process(self, query):
"""
Send the input query to tokenizer
tokenized input is send to the Core module for decision making
"""
tokenized_input = tokenizer.Tokenizer().tokenize(query)
core.Core().decide(tokenized_input)
-
# listener.py
import processor
class Listener:
def listen(self):
""" Continuosly listens to user input """
while True:
query=input()
processor.Processor().process(query)
-
# bot.py
import listener
class Bot:
def __init__(self, listener):
listener.listen()
Bot(listener.Listener())