方法无法访问不同类的类变量

2024-09-29 20:21:32 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在用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

如果需要,我也可以在这里发布类ElementKindKita,但是它们基本上只包含一个__init__方法,如果需要的话还包含一个get方法。他们也工作,我已经测试过了

我现在的问题是,在名为Sortierung的主类中,我将thisDAO作为KitaDAO的一个实例,并希望像平常一样使用它来调用方法等。遗憾的是类变量thisDAOSortierung的方法中是不可访问的。所以基本上这个代码有这样的反应:

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

顺便说一句,我是德国人,这就是为什么变量名都是德语。抱歉:)


Tags: inimportselfforsqldefcursorresults
1条回答
网友
1楼 · 发布于 2024-09-29 20:21:32

您根本不需要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)

除非有其他问题,否则我应该做的

相关问题 更多 >

    热门问题