#python #function #class #kivy #kivymd
#питон #функция #класс #киви #кивимд
Вопрос:
Я знаю, что мы можем получить доступ к переменным, объявленным в основном классе приложения. Это можно сделать с помощью «app.NameOfTheVariable», например, доступ к строковому значению:
#Python file from kivymd.app import MDApp from kivymd.uix.boxlayout import MDBoxLayout class MainScreen(MDBoxLayout): pass class MainApp(MDApp): App_Name = "Galasken Proyect 001" MainApp.run() #Kivy file MainScreen: lt;MainScreengt;: MDLabel: text: app.App_name
Однако я хочу знать, как мы можем получить доступ к переменным, которые находятся внутри функции, которая находится внутри класса. Например, в следующем коде, как я могу получить доступ к «Имя_объекта»
#Python file from kivymd.app import MDApp from kivymd.uix.boxlayout import MDBoxLayout class MainScreen(MDBoxLayout): pass class MainApp(MDApp): App_Name = "App Example" def a_function(self): Object_name = "this is a name" MainApp.run()
Я пробовал разные вещи в файле kivy, но ничего не получилось. Это то, что я пробовал:
#Kivy file MainScreen: lt;MainScreengt;: MDLabel: text: app.a_function().App_name # text: app.a_function.App_name # text: app.App_name
Что я могу сделать, чтобы получить доступ к этой переменной?
Ответ №1:
Переменная Object_name
в функции a_function
недоступна для вас, потому что она «локальна» в области действия функции.
Единственное, что вы можете сделать, это:
def a_function(self): self.Object_name = "this is a name"
Это будет размещено Object_name
в области MainApp
и может быть доступно по app.Object_name
NB: Это может быть побочным эффектом. Переменная Object_name
— член в MainApp
не существует до тех пор, пока вы не вызовете a_function()
. Если вы попытаетесь получить доступ app.Object_name
до вызова этой функции, вы получите сообщение об ошибке о несуществующем атрибуте.
Вы можете остановить этот побочный эффект, добавив self.Object_name
в свой __init__
метод конструктора. В качестве альтернативы вы можете просто a_function()
вернуть эту строку напрямую.
def a_function(self): Object_name = "this is a name" return Object_name