Метод не может получить доступ к переменной класса другого класса - PullRequest
0 голосов
/ 11 декабря 2019

Я пишу алгоритм на Python, который должен сортировать детей (из таблицы базы данных) в одно из выбранных ими желаний детского сада (также из таблицы базы данных), следуя определенным критериям того, кто должен гарантировать место в выбранном им. Детский сад первый. Для этого я сначала написал класс KitaDAO, чтобы связать программу с базой данных и извлечь информацию из определенных таблиц, сохранив их как объект.

import pymysql
import json
from Kita import Kita
from Kind import Kind
from Element import Element

class KitaDAO():
    def __init__(self):
        self.db = pymysql.connect("localhost","projekt","projekt","kita" )
        self.cursor = self.db.cursor()
        self.kitaList = []
        self.kinderList = []


def getKitas(self):
    self.sql = "SELECT * FROM kitas"
    try:
        self.cursor.execute(self.sql)
        self.results = self.cursor.fetchall()
        for row in self.results:
            thisKita = Kita(row[0],row[1],row[2],row[3],row[4],row[5],row[6],row[7],row[8])
            self.kitaList.append(thisKita)
    except Exception as e:
        print (e)
    return self.kitaList

def getWarteliste(self):
    self.sql = "SELECT * FROM warteliste"
    self.warteliste = []
    try:
        self.cursor.execute(self.sql)
        self.results = self.cursor.fetchall()
        for row in self.results:
            thisElement = Element(row[0],row[1],row[2],row[3],row[4],row[5],row[6])
            self.warteliste.append(thisElement)
    except Exception as e:
        print (e)
    return self.warteliste


def getKinder(self):
    self.sql = "SELECT * FROM kinderprofil"
    try:
        self.cursor.execute(self.sql)
        self.results = self.cursor.fetchall()
        for row in self.results:
            thisKind = Kind(row[0],row[1],row[2],row[3],row[4],row[5],row[6])
            self.kinderList.append(thisKind)
    except Exception as e:
        print (e)
    return self.kinderList

def getKindOnWarteliste(self,kita,wunschnummer):
    self.kinderList = []
    self.warteliste = []
    self.warteliste = self.getWarteliste()

    if (wunschnummer == 1):
        for i in self.warteliste:
            if (kita == i.getWunsch1()):
                self.kinderList.append(i.getKind())
    elif (wunschnummer == 2):
        for i in self.warteliste:
            if (kita == i.getWunsch2()):
                self.kinderList.append(i.getKind())
    elif (wunschnummer == 3):
        for i in self.warteliste:
            if (kita == i.getWunsch3()):
                self.kinderList.append(i.getKind())
    else:
        print("Error: Eine ungültige Wunschnummer wurde übergeben.")

    return self.kinderList

При необходимости я также могу опубликовать классы Element, Kind и Kita здесь, но они в основном содержат только метод __init__ и, если необходимо, метод get. Они также работают, я проверял это раньше.

Моя проблема сейчас в том, что в моем основном классе под названием Sortierung я сделал thisDAO экземпляром KitaDAO и хочу использовать его для вызова методов итакой, как обычно. К сожалению, переменная класса thisDAO недоступна в методе Sortierung. Таким образом, в основном этот код имеет ответ:

File "Sortierung.py", line 3, in <module> class Sortierung():
File "Sortierung.py", line 30, in Sortierung checkBetreuung(i,warteliste)
File "Sortierung.py", line 11, in checkBetreuung KinderObjektListe = thisDAO.getKinder()
nameError: name 'thisDAO' is not defined

Я пометил строки в приведенном ниже коде.

from KitaDAO import KitaDAO

class Sortierung(): #---------- This is line 3
    kitas = []
    thisDAO = KitaDAO()
    kitas = thisDAO.getKitas()

def checkBetreuung(kita,kinderIDListe):
    KinderObjektListe = []
    KinderObjektListe = thisDAO.getKinder() #---------This is line 11

#left something out here that was irrelevant


for x in range(1,4):
    for i in kitas:
        warteliste = []
        warteliste = thisDAO.getKindOnWarteliste(i.getID,x)
        checkBetreuung(i,warteliste) #-------------This is line 30

Кроме того, кстати, я немец, поэтому имена переменных все вНемецкий. Извините:)

1 Ответ

1 голос
/ 11 декабря 2019

Вам вообще не нужен класс Sortierung (это не Java; не все должно быть инкапсулировано в классе) - коренная проблема в том, что thisDAO заканчивается его атрибутом класса.

Что-то вроде

from KitaDAO import KitaDAO

thisDAO = KitaDAO()
kitas = thisDAO.getKitas()

def checkBetreuung(kita, kinderIDListe):
    KinderObjektListe = thisDAO.getKinder()

for x in range(1,4):
    for i in kitas:
        warteliste = thisDAO.getKindOnWarteliste(i.getID(), x)
        checkBetreuung(i, warteliste)

должно сработать, исключая любые другие проблемы.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...