python静态方法未获取类对象的最新值

q5lcpyga  于 2021-08-25  发布在  Java
关注(0)|答案(0)|浏览(160)

我有一门python课

class DeepLearningBot:
    stopwords = ['i',  'am', 'a',
                 'to', 'is', 'do', 'in', 'of']
    labelModelPath = os.path.join(dirName, "..\config\labels_mapping.pkl")
    modelPath = os.path.join(dirName, "models/elmo-model-bilstm2.h5")

    modelBlstm = {}
    modelLabel = {}

    @staticmethod
    def init():
        DeepLearningBot.modelBlstm = tf.keras.models.load_model(DeepLearningBot.modelPath,
                                                                custom_objects={
                                                                    'elmo': hub.Module("https://tfhub.dev/google/elmo/2", trainable=False),
                                                                    'tf': tf
                                                                })

        # mapping model of lables and positions
        DeepLearningBot.modelLabel = joblib.load(
            DeepLearningBot.labelModelPath)

    @staticmethod
    def process(query: str) -> Intent:
        intent = DeepLearningBot.__predict(query)
        return intent

    def __predict(query: str) -> Intent:
        with tf.Session() as session:
            K.set_session(session)
            session.run(tf.global_variables_initializer())
            session.run(tf.tables_initializer())
            predictions = DeepLearningBot.modelBlstm.predict([query])

        intent = None

        return intent

现在在我的main.py中
我愿意

DeepLearningBot.init()

在我的api层,我使用

intent = DeepLearningBot.process(query)

但它显示了错误

predictions = DeepLearningBot.modelBlstm.predict([query])
AttributeError: 'dict' object has no attribute 'predict'

它仍在访问空数据库 {} 作为 modelBlstm 变量
如果我

modelBlstm:Any

上面说 DeepLearningBot 没有 modelBlstm 变量
如果我调试代码并在其中放置断点 init 方法将正确的对象指定给它 modelBlstm 有什么帮助吗?
更新1
我试过了 @classmethod 结束 initprocess 而不是 @staticmethod 并且通过了考试 cls param作为第一个要运行的参数。
但仍然不起作用。
那就不打电话了

DeepLearningBot.init()

从main.py,尝试从 process() 方法本身,然后它就起作用了。
但是我想要 init() 方法由其他类或main.py从同一类外部调用

暂无答案!

目前还没有任何答案,快来回答吧!

相关问题