【问题标题】:No value for argument 'score' in unbound method call未绑定方法调用中的参数“分数”没有值
【发布时间】:2021-01-18 20:25:43
【问题描述】:

我一直在尝试按如下方式创建一个类:

class Student:
    numberOfStudents = 0
    numberofsections = 0

    def __init__(self):
        print("Welcome to our humble organization.")

    def RegisterStudent(self, name, age, phonenumber, score):
        self.name = name
        self.age = age
        self.number = phonenumber
        self.score = score
        Student.numberOfStudents += 1
        return "Registeration is done successfully"

    def ViewStudentData(self):
        return f"Student name: {self.name}\nStudent age: {self.age}\nStudent score: {self.score}"

    @classmethod
    def Number_Of_Students(cls):
        return f"The number of students is: {Student.numberOfStudents}"

    @classmethod
    def Number_Of_Sections(cls):
        Student.numberofsections = (Student.numberOfStudents/30)
        Student.numberofsections = int(Student.numberofsections)
        return f"Numebr of sections is {Student.numberofsections}"

    @classmethod
    def View_year_Data(cls):
        return Student.Number_Of_Students(), Student.Number_Of_Sections()

当我尝试如下调用实例方法时:

Std_One = Student.RegisterStudent("Yakoza", 21, "5465164641564", 80)

它给了我这个错误:

No value for argument 'score' in unbound method call pylint(no-value-for-parameter)

错误在哪里,我看不到(用朵拉的声音)

【问题讨论】:

    标签: python python-3.x visual-studio-code


    【解决方案1】:

    通过将其称为Student.RegisterStudent(...),您将RegisterStudent 用作类方法,即使您想创建Student 的实例。简单的解决方法是:

    StdOne = Student().RegisterStudent("Yakoza", 21, "5465164641564", 80)
    

    Student() 部分创建了您的类的一个实例,然后将其作为变量self 传递给RegisterStudent。 (您收到错误是因为在您的原始调用中,self="Yakoza"name=21age="5465164641564"phonenumber=80;所以score 没有得到值。根本原因是它被调用的方式。)

    但是,RegisterStudent 返回文本“注册成功完成”,存储在变量中没有用处。将返回行更改为return self,这是通过调用Student() 创建的对象。

    def RegisterStudent(self, name, age, phonenumber, score):
        self.name = name
        self.age = age
        self.number = phonenumber
        self.score = score
        Student.numberOfStudents += 1
        print("Registeration is done successfully")
        return self
    

    之后,您可以看到它的工作原理:

    >>> print(StdOne.name)
    'Yakoza'
    >>> print(Student.numberOfStudents)
    1
    

    顺便说一句,你应该初始化__init__()中的所有实例变量,即使只是将它们设置为None,因为Python3优化了实例字典if实例变量都在__init__() 中声明。所以:

    class Student:
        numberOfStudents = 0
        numberofsections = 0
    
        def __init__(self):
            self.name = None
            self.age = None
            self.number = None
            self.score = None
            print("Welcome to our humble organization.")
    

    【讨论】:

    • 我不知道该说什么了,我非常感谢和感谢你这个人,不仅仅是为了回答,而是为了额外的提示❤❤❤
    • 您可以使用RegisterStudent 作为类方法,就像您为其他人所做的那样:将self 更改为cls 并在其中执行inst = cls(),这将创建一个实例的Student 然后执行inst.name = ... 等,然后是return inst。然后像原来那样调用它。
    • 顺便说一句,如果您对答案感到满意,请阅读“What should I do when someone answers my question?”以及VotingAccepting
    猜你喜欢
    • 1970-01-01
    • 2016-03-05
    • 2016-07-11
    • 1970-01-01
    • 1970-01-01
    • 2015-07-06
    • 1970-01-01
    • 2018-05-16
    • 2014-02-13
    相关资源
    最近更新 更多