Можно ли определить методы класса как модули Shiny Python?Python

Программы на Python
Anonymous
Можно ли определить методы класса как модули Shiny Python?

Сообщение Anonymous »

Я пытаюсь создать приложение Shiny для Python, в котором части кода формы можно разбить с помощью модулей Shiny, где я могу определить конкретный пользовательский интерфейс и логику сервера как метод класса, но в конечном итоге унаследовать некоторые базовые возможности. У меня есть следующее блестящее приложение:

Код: Выделить всё

import pandas as pd
from shiny import App, reactive, ui, module, render
from abc import ABC, abstractmethod

class ShinyFormTemplate(ABC):
@abstractmethod
@module.ui
def ui_func(self):
pass

@abstractmethod
@module.server
def server_func(self, input, output, session, *args, **kwargs):
pass

class FruitForm(ShinyFormTemplate):
@module.ui
def ui_func(self):
return ui.row(
ui.input_text("fruits",'Select a Fruit',""),
ui.output_text("output_fruit"),
ui.input_text("qtys",'Quantity:',""),
ui.output_text("output_qty"),
)

@module.server
def server_func(self, input, output, session, *args, **kwargs):
@render.text
def output_fruits():
return input.fruits()

@render.text
def output_qty():
return input.qtys()

class VeggieForm(ShinyFormTemplate):
@module.ui
def ui_func(self):
return ui.row(
ui.input_radio_buttons("veggie","Select a Veggie:",{'Asparagus':'Asparagus','Spinach':'Spinach','Squash':'Squash','Lettuce':'Lettuce'},'Lettuce'),
ui.output_text("output_veggie"),
ui.input_text("qtys",'Quantity:',""),
ui.output_text("output_qty"),
)

@module.server
def server_func(self, input, output, session, *args, **kwargs):
@render.text
def output_veggie():
return input.veggie()

@render.text
def output_qty():
return input.qtys()

fruits = FruitForm()
veggies = VeggieForm()

app_ui = ui.page_fluid(
ui.page_navbar(
ui.nav_panel("New Fruit", "New Fruit - Input Form",
fruits.ui_func('fruit')
),

ui.nav_panel("New Veggie", "New Veggie - Input Form",
veggies.ui_func('veggie')
),
title="Sample App",
id="page",
),
title="Basic App"
)

def server(input, output, session):
fruits.server_func('fruits')
veggies.server_func('veggie')

app = App(app_ui, server)
Но при попытке запустить это, я получаю сообщение об ошибке:

Код: Выделить всё

Exception has occurred: ValueError
`id` must be a single string
File "C:\Users\this_user\OneDrive\Documents\Programming Projects\Python\example_class_module\app.py", line 66, in 
fruits.ui_func('fruit')
ValueError: `id` must be a single string
Я не понимаю эту ошибку, поскольку мне казалось, что я предоставил строковый идентификатор для пространства имен модуля (в данном случае «фрукты»).
Что я пробовал:[/b]
Я пытался определить объекты сервера и пользовательского интерфейса вне класса и передать их в качестве аргументов функции init() вместо определяя их как методы класса. Однако, работая таким образом, я не думаю, что смогу получить доступ к атрибутам экземпляра класса из функции модуля с помощью self.attribute.
Можно ли определить методы класса как блестящий модуль (серверные и пользовательские) компоненты?

Подробнее здесь: https://stackoverflow.com/questions/790 ... on-modules

Вернуться в «Python»