Python-无法在类中的方法之间传递变量

Python-无法在类中的方法之间传递变量,python,Python,我是一名python初学者,在做一个课堂练习时,我必须创建一个学生课堂,支持从用户那里获取5个科目的分数并返回百分比。这两项工作都必须通过创建两种不同的方法来完成。我已经试过多次了,但我的逻辑似乎有缺陷,那么我该如何解决这个问题呢?我知道,如果我在init类中将主题1-5作为属性传递,那么代码本来可以工作,但我被指示使用单独的方法。调用perc()时遇到的错误是未定义“setMarks”。这是我的密码: class Student: def __init__(self, name, r

我是一名python初学者,在做一个课堂练习时,我必须创建一个学生课堂,支持从用户那里获取5个科目的分数并返回百分比。这两项工作都必须通过创建两种不同的方法来完成。我已经试过多次了,但我的逻辑似乎有缺陷,那么我该如何解决这个问题呢?我知道,如果我在init类中将主题1-5作为属性传递,那么代码本来可以工作,但我被指示使用单独的方法。调用perc()时遇到的错误是未定义“setMarks”。这是我的密码:

class Student:

    def __init__(self, name, rollno, stream):
        self.name = name
        self.roll = rollno
        self.stream = stream

    def setMarks(self):

        sub1 = int(input("Enter marks for subject 1: "))
        sub2 = int(input("Enter marks for subject 2: "))
        sub3 = int(input("Enter marks for subject 3: "))
        sub4 = int(input("Enter marks for subject 4: "))
        sub5 = int(input("Enter marks for subject 5: "))
        totalmarks = sub1 + sub2 +sub3 + sub4 + sub5


    def getStream(self):
        if self.stream == "A":
            print("Arts")
        elif self.stream == "C":
            print("Commerce")
        elif self.stream == "S":
            print("Science")
        else:
            print("Invalid stream")

    def perc(self):
        totalmarks = setMarks()

        percentage = ( totalmarks / 500) * 100 
        print(f"{self.name} has a percentage of: {percentage}" )    
你需要

def setMarks(self):

    sub1 = int(input("Enter marks for subject 1: "))
    sub2 = int(input("Enter marks for subject 2: "))
    sub3 = int(input("Enter marks for subject 3: "))
    sub4 = int(input("Enter marks for subject 4: "))
    sub5 = int(input("Enter marks for subject 5: "))
    totalmarks = sub1 + sub2 +sub3 + sub4 + sub5
    return totalmarks
    # ^^^
此外,在
Python
中的类中,您需要使用
self
调用函数(从技术上讲,它可以是任何函数,例如
cls
mypointer
任何函数,而不是

    totalmarks = setMarks()
你需要写作

    totalmarks = self.setMarks()

你不能从
setMarks()
中返回任何内容,因此
perc()
中的
totalmarks
总是
None
。你需要
return totalmarks
我试过了,但仍然得到了与以前相同的名称错误。嗯,我试过了,仍然得到了相同的名称错误NameError@zsasz:更新了答案,您需要编写
self.setMarks()
。嘿,谢谢,它终于可以工作了,但是当我调用perc方法时,我必须重新输入我的标记。你知道我该怎么解决吗?