簡體   English   中英

方法無法訪問不同類的類變量

[英]Method cannot access class variable of different class

我正在用 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 Kind ,但它們基本上只包含一個__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

另外順便說一句,我是德國人,這就是為什么變量名稱都是德語的原因。 對不起 :)

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

應該可以解決問題,除非有任何其他問題。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM