pywebviewのjs_apiにwindowオブジェクトを注入するクラスを使いたい

起こったこと

pywebviewを使ったアプリを開発中である。

pywebview.flowrl.com

jsのapiを通してpython側でファイルを呼び出す「open_file_dialog」メソッドを使いたいのだが、このメソッドを呼ぶにはjs_apiにwindowオブジェクトを注入しなければならない気がした。

こうした

# main.py
import webview
from Api import Api

window = webview.create_window(
    'title',
    'path_to_html',
)

# windowオブジェクトをApiに注入
window._js_api = Api(window)
webview.start()

# Api.py
from webview import OPEN_DIALOG

class Api:
    def __init__(self, window):
        self.window = window

    def load_file_data(self):
        file_types = ('json (*.json)', 'All files (*.*)')
        paths = window.create_file_dialog(
            OPEN_DIALOG, allow_multiple=False, file_types=file_types)
        file_data = None
        with open(paths[0], 'r', encoding='utf-8') as f:
            file_data = f.read()
        # 以後、file_dataを使ったあれこれ

ただ、これはアンダースコアで開始するメンバー変数に対して直接記入している。これが本当に良いことなのかはちょっとわからない。若干ハック的な使い方なのかもしれない。

_single_leading_underscore: "内部でだけ使う" ことを示します。 たとえば from M import * は、アンダースコアで始まる名前のオブジェクトをimportしません。

pep8-ja.readthedocs.io

ちなみにjsではこんな感じ

const button = document.querySelector(".button");

button.addEventListener("click", async () => {
  // pywebviewというグローバルが追加されている。promiseなのでawaitを使うなどをする
  await pywebview.api.load_file_data();
});