AttributeError:“str”对象没有属性“get\u-lect”

2024-04-27 14:02:39 发布

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

在我的chromosome.py中,我一直面临这样一个错误:我的str对象没有get_lect()的属性

这是我的chromosome.py代码

def initialize(self):
    subjects = self._data.get_subjects()
    for i in range(0, len(subjects)):
        modules = subjects[i].get_module()
        for j in range(0, len(modules)):
            newclass = Class(self._class_num, subjects[i], modules[j])
            self._class_num += 1
            newclass.set_lesson(self._data.get_lessons()[rand.randrange(0, len(self._data.get_lessons()))])
            newclass.set_room(self._data.get_venues()[rand.randrange(0, len(self._data.get_venues()))])
            newclass.set_lect(modules[j].get_lect()[rand.randrange(0, len(modules[j].get_lect()))])
            self._classes.append(newclass)
        return self

class.py

class Class:
    def __init__(self, cid, sub, mod):
        self._id = cid
        self._sub = sub
        self._mod = mod
        self._lect = None
        self._lesson = None
        self._room = None

    def get_cid(self): return self._id

    def get_sub(self): return self._sub

    def get_mod(self): return self._mod

    def get_lect(self): return self._lect

    def get_lesson(self): return self._lesson

    def get_room(self): return self._room

    def set_lect(self, lect): self._lect = lect

    def set_lesson(self, lesson): self._lesson = lesson

    def set_room(self, room): self._room = room

    def __str__(self):
        return f"{self._sub.get_name()},{self._mod.get_num()},{self._lesson.get_num()},"\
               f"{self._lect.get_id(), self._lesson.get_id()}"

Data.py

from model.Venue import Venue
from model.Time import Time
from model.Lecturer import Lecturer
from model.Module import Module
from model.Subject import Subject
import pymysql
import csv

class Data:
    def __init__(self):
        self._venues = []
        self._lessons = []
        self._lect = []
        self._modules = []
        self._subjects = []
        con=pymysql.connect(host="localhost",user="root",password="",database="timetable")
        cur=con.cursor()
        cur.execute("SELECT * from venue")
        result = cur.fetchall()
        # vfile = open('./data/venue.csv', 'w', newline='')
        # filewrite = csv.writer(vfile)
        #filewrite.writerow(result)
        with open('./data/venue.csv', 'w', newline='') as csvfile:
            csvwriter = csv.writer(csvfile)
            for row in result:
                csvwriter.writerow([row[0], row[1]])
                # print(row[0],row[1])
                self._venues.append(Venue(str(row[0]), int(row[1])))
        cur.execute("SELECT * from timelist")
        timeresult = cur.fetchall()
        with open('./data/times.csv', 'w' ,newline='') as times:
            timewriter = csv.writer(times)
            for row in timeresult:
                timewriter.writerow([row[0], row[1], row[2]])
                self._lessons.append(Time(str(row[0]), str(row[1]), int(row[2])))
        cur.execute("SELECT * from lecturer")
        lectresult = cur.fetchall()
        with open('./data/lecturers.csv', 'w', newline='') as lecturerspage:
            lecturerwriter = csv.writer(lecturerspage)
            for row in lectresult:
                lecturerwriter.writerow([row[0], row[1]])
                self._lect.append(Lecturer(str(row[0]), str(row[1])))
        cur.execute("SELECT * from module")
        modresult = cur.fetchall()
        with open('./data/modules.csv','w', newline='') as modules:
            modulewriter = csv.writer(modules)
            for row in modresult:
                # lecturers= []
                # lecturers_ids = str(row[3]).split(",")
                # for i in lecturers_ids:
                #     lecturers.append(self.get_lecturer_by_id(i.strip()))
                modulewriter.writerow([row[0], row[1], row[2], row[3]])
                self._modules.append(Module(str(row[0]),str(row[1]), int(row[2]), str(row[3])))
        cur.execute("SELECT * from subject")
        subresult = cur.fetchall()
        cur.close()
        con.close()
        with open('./data/subjects.csv', 'w', newline='') as subjects:
            subwriter = csv.writer(subjects)
            for row in subresult:
                subwriter.writerow([row[0],row[1]])
                self._subjects.append(Subject(str(row[0]),str(row[1])))
        self._number_of_classes = 0
        for i in range(0, len(self._subjects)):
            self._number_of_classes += len(self._subjects[i].get_module())

    def get_venues(self): return self._venues
    def get_lect(self): return self._lect
    def get_modules(self): return self._modules
    def get_subjects(self): return self._subjects
    def get_lessons(self): return self._lessons
    def get_number_of_classes(self): return self._number_of_classes

我正在尝试一种面向对象的方法,尝试对这段代码执行遗传算法。然而,每次我试图显示数据时,我的get_lect似乎都会出错

每当我运行程序查看时,总是会得到错误文件"C:\Users\TP046012\IdeaProjects\fypfinal\Chromosome.py", line 55, in initialize newclass.set_lect(modules[j].get_lect()[rand.randrange(0, len(modules[j].get_lect()))]) AttributeError: 'str' object has no attribute 'get_lect'


Tags: csvinfromselfmodulesdatagetreturn