如何将列表变量从一个类的方法传递到另一个类的方法?

2024-06-01 07:43:20 发布

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

我需要将Student类中的getSelectedCourses方法中的selectedCourses传递给Advisor类方法approveselectedcourses。实际上,我需要使用Student类的sendCourseRegistrationRequest方法将getSelectedCourses方法中的selectedCourses列表传递给Advisor类方法ApproveSelectedCourse,但我不知道如何将列表从一个类传递给另一个类。或者如何在学生课堂上把它传给一个单独的方法。我现在没有主意,也没有时间了。所以这是我最后的机会了。谢谢你的帮助!你知道吗

我尝试将Student类作为参数添加到Advisor类中,我尝试在所有类之外定义一个变量来引用我尝试使用的Student类中的方法。我已经尝试将list变量传递给Student类中的一个单独的方法。我试过让Student方法成为class方法和static方法,但我甚至不知道@classmethod&;staticmethod究竟是如何工作的,也不知道如何使用它们来帮助我。在这一点上,我已经尝试了我能想到的一切。你知道吗

import random

class Person:
    def __init__(self, name):
        self.name = name

    def getName(self):
        print('Student name is: {}'.format(self.name))

class Student(Person):

    def __init__(self, name, stuID):
        #print('I am a student')
        Person.__init__(self, name)
        self.stuID = stuID
        self.finishedCourses = []
        self.selectedCourses = []

    def getStuID(self):
        print('Student ID is: {}'.format(self.stuID))

    def getSelectedCourse(self, courseList):
        SelectedCourse = []
        for i in courseList:
            if i < 400:
                SelectedCourse.append(i)
        #print(SelectedCourse)

        for key in prerequisiteDict.keys():
            if key in SelectedCourse:

                SelectedCourse.remove(key)
        #print(SelectedCourse)

        i = 0

        while i <= 2:

            finishedCourses = random.choice(SelectedCourse)
            self.finishedCourses.append(finishedCourses)
            #print(finishedCourses)

            i += 1

        print('Finished courses: {}'.format(self.finishedCourses))


        x = 0

        while x <= 2:

            selectedCourses = random.choice(courseList)
            self.selectedCourses.append(selectedCourses)

            x += 1

        print('Selected courses: {}'.format(self.selectedCourses))



    def sendCourseRegistrationRequest(self):
        pass
##        for key in prerequisiteDict.keys():
##            if key not in self.finishedCourses:
##
##                self.finishedCourses.remove(key)
##        print('Update selected courses: {}'.format(self.finishedCourses))

    def updateSelectedCourse():
        pass

class Advisor(Person):
    def __init__(self, name):
        print("I'm here.")
        Person.__init__(self, name)




    def approveSelectedCourse(self, Student):
        print("I'm here2.")
##        Student.__init__(self, finishedCourses)
##        self.var1 = Student.finishedCourses
##        print('self.var1 is {}: '.format(self.var1))
##        
##
##        for key in prerequisiteDict.keys():
##            
##            if key in SelectedCourse:
##                return True
##            else:
##                    self.var1.remove(key)
##                    print('updated course selection: {}'.format(self.selfvar1))
##                    
##                

##        for key in prerequisiteDict.keys():
##            if key in getSelectedCourse:
##
##                getSelectedCourse.remove(key)
##        print(getSelectedCourse)

courseList =  [110, 213, 315, 316, 412, 121, 223, 326, 328, 422,
               136, 238, 335, 336, 432, 140, 243, 345, 346, 448,
               150, 253, 355, 356, 452]

prerequisiteDict = {213:110, 412:316, 326:223, 422:328,
                    238:136, 345:243, 355:253, 452:356}

getSelectedCourse = Student.getSelectedCourse

stuObj = Student('Alice', 98980)
stuObj.getName()
stuObj.getStuID()
stuObj.getSelectedCourse(courseList)
#stuObj.sendCourseRegistrationRequest()
##AdvObj = Advisor('Cindy')
##AdvObj.approveSelectedCourse('Alice')

基本上,我的代码通过Student getSelectedCourses方法工作,这是我所想象的。在我看来,解决我的问题最简单的方法就是把自选课程=[]到sendCourseRegistrationRequest学生方法,然后将其传递给Advisor方法approveSelectedCourse,后者将检查selectedCourses列表,如果selectedCourses中存在prereq中的一个键,则会删除该键从selectedCourses列表中选择课程。理想的情况下,我只想找出一种方法,将selectedCourses列表从学生类传递到导师类,但我不知道如何传递。你知道吗


Tags: 方法keynameinselfformatinitdef
1条回答
网友
1楼 · 发布于 2024-06-01 07:43:20

我认为这里的问题是组织。因为Advisor继承自Person,所以没有self.selectedCourses属性。我要做的是两件事之一:

  1. 将学生实例作为dict存储在Advisor_instance.advisees属性中,这样您就可以按名称进行查找
  2. 将Student实例传递给方法本身,以便能够查找该属性

1个

class Advisor(Person):
    def __init__(self, name, advisee=None):
        print("I'm here.")
        Person.__init__(self, name)
        self.advisees = {advisee.name: advisee} if advisee else {}

    def add_advisee(self, student_inst):
        if student_inst.name in self.advisees:
            raise KeyError("Entry already exists")
        self.advisees[student_inst.name] = student_inst

    # Easy name lookup and returns the list
    def get_course_list(self, name):
        # Will raise keyerror if name not in advisees
        return self.advisees.[name].selectedCourses    

alice = Student("Alice", 98980)
cindy = Advisor("Cindy", alice)

cindy.get_course_list('alice')

我个人认为,对于您的用例来说,第一个实现更直观一些。advisor可以有很多建议,存储Student的实例可以进行简单的名称查找,您不需要传递信息。你知道吗

将其更具体地扩展到您要查找的内容:

class Advisor(Person):
    def __init__(self, name, advisee=None):
        print("I'm here.")
        Person.__init__(self, name)
        self.advisees = {advisee.name: advisee} if advisee else {}

    def add_advisee(self, student_inst):
        if student_inst.name in self.advisees:
            raise KeyError("Entry already exists")
        self.advisees[student_inst.name] = student_inst

    def approveSelectedCourse(self, student_name):
        # don't set a self attr here
        # will still raise a KeyError for missing advisees
        var1 = self.advisees[student_name].finishedCourses

        # Do things with var1


class Advisor(Person):
    def __init__(self, name):
        print("I'm here.")
        Person.__init__(self, name)

    def get_course_list(self, student_inst):
        return student_inst.selectedCourses


alice = Student("Alice", 98980)
cindy = Advisor("Cindy")

cindy.get_course_list(alice)

如果Advisor的实例更一般,也就是说,不需要有一个特定的Advisor,只要它们能够完成类似Advisor的方法,这种方法就会更好地工作。在这种情况下,name属性可以删除,方法可以是静态的,在这种情况下,为什么要使用类?你知道吗

相关问题 更多 >