Ich bin während meiner Entwicklung auf ein Problem gestoßen:

Basierend auf meinem Verständnis und einigen Suchanfragen zu Stackoverflow (insbesondere diese Frage), dies geschieht aufgrund der Importe, die ich durchgeführt habe. Meine Dateien werden voneinander importiert. Wenn Python also versucht, eines zu laden, während das andere noch nicht fertig ist, stürzt es mit der Fehlermeldung „teilweise initialisiertes Modul“ ab. Ich habe verstanden, dass es sich um eine Art strukturelles Abhängigkeitsproblem handelt. Meine Lösung bestand also darin, eine andere Ansicht zu erstellen, die diese beiden Ansichten stattdessen aufrufen können.
Hier ist zunächst der Logikablauf, den ich für meinen Bot durchgeführt habe. Ich habe zuerst diesen Teil gemacht, in dem der Benutzer „Wie gespielt wird“ auswählt, und eine andere Ansicht, wenn der Benutzer fortfahren oder beenden möchte:

Ich habe einfach die Ansichten in einer Schleife durchlaufen. Hier sind meine Ansichten. Ich füge nur den relevanten Code hinzu:
Code: Select all
rps_views.pyCode: Select all
import discord, datetime
from game.rock_paper_scissors.utils.game_logic import (
get_players_choice_value,
get_bots_choice_value,
rock_paper_scissors,
get_state_emoji
)
from game.rock_paper_scissors.views.rps_navigate import (
RpsNavigate
)
rps_nav_obj = RpsNavigate()
class RpsMainMenuView(discord.ui.View):
def __init__(self, *, timeout = 180):
super().__init__(timeout=timeout)
#How to play
@discord.ui.button(label="❔How to Play", style=discord.ButtonStyle.primary)
async def how_to_play(self, btn_interaction: discord.Interaction, button: discord.ui.Button):
await btn_interaction.response.send_message(
"Classic Rock, Paper, Scissors! Choose between the three, and we'll see if you win against me!",
view=rps_nav_obj.determine_view("HTP")
)
Code: Select all
how_to_play_views.pyCode: Select all
import discord
from game.rock_paper_scissors.views.rps_navigate import (
RpsNavigate
)
rps_nav_obj = RpsNavigate()
class HowToPlayView(discord.ui.View):
def __init__(self, *, timeout: float | None = 180):
super().__init__(timeout=timeout)
#Continue
@discord.ui.button(label="✅Continue", style=discord.ButtonStyle.success)
async def htp_continue(self, btn_interaction: discord.Interaction, button: discord.ui.Button):
await btn_interaction.response.send_message(
"Ready to Play Rock Paper Scissors?",
view=rps_nav_obj.determine_view("RPS")
)
#Exit
@discord.ui.button(label="🔚 Exit", style=discord.ButtonStyle.red)
async def htp_exit(self, btn_interaction:discord.Interaction, button: discord.ui.Button):
await btn_interaction.response.send_message(
"Goodbye!"
)
Code: Select all
rps_navigate.pyCode: Select all
import discord
class RpsNavigate(discord.ui.View):
def __init__(self):
self = self
def determine_view(self, view_choice):
self.view_choice = view_choice
print(f"[RPS Navigate] Determining views to be passed: {self.view_choice}")
#initialize views
print("Initializing views...")
from game.rock_paper_scissors.views.rps_views import (
RpsMainMenuView,
RpsMovesView
)
from game.rock_paper_scissors.views.how_to_play_views import (
HowToPlayView
)
rps_main_menu_view = RpsMainMenuView()
how_to_play_view = HowToPlayView()
rps_moves_view = RpsMovesView()
if self.view_choice == "RPS":
return rps_main_menu_view
elif self.view_choice == "HTP":
return how_to_play_view
elif self.view_choice == "RMV":
return rps_moves_view
else:
return rps_main_menu_view
Mobile version