python3.x中的TypeError

2024-04-25 06:59:23 发布

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

我不知道怎么了!这是一个非常简单的程序,我已经做了很多头部撞击!请有人指点我!在

这是CSE 111编程语言II课程的实验问题。他们在大学里教Java,我用Java编写的代码运行得很好。在

我只需要创建一个包含一些字段的Student类,用获取和设置属性的方法保存学生的基本信息。然后创建该类的实例并试用这些方法。 但每次运行此程序时,都会出现以下错误:

TypeError: set_name() takes exactly 1 positional argument (2 given)

这是我写的代码。在

^{pr2}$

Tags: 方法程序信息属性java编程语言student学生
3条回答

试试这个:

import sys 
class Student:
   '''Student class'''

   self.name = None
   self.id = 0
   self.address = None
   self.cgpa = None

   def get_name(self):
       return self.name

   def set_name(self, n):
       self.name = n

   def get_id(self):
       return self.id

   def set_id(self, i):
       self.id = i

   def get_address(self):
       return self.address

   def set_address(self, a):
       self.address = a

   def get_cgpa(self):
       return self.cgpa

   def set_cgpa(self, c):
       self.cgpa = c

您需要将self作为第一个参数传递给类的每个成员函数。成员变量必须用self引用,即self.name。此外,您可能希望包含一个__init__()函数;这通常用于初始化任何成员变量,并在类的实例化时调用。在

请看这里的Python文档,以获得一些格式良好的类的示例:http://docs.python.org/tutorial/classes.html#random-remarks

您不接受对实例的引用作为该方法的第一个参数,即您的set_name()应该写入:

def set_name(self, n):
    self.name = n

这与其他语言有些不同,后者有一个内置关键字(例如this)来引用当前对象。Python显式地将该引用作为方法的参数传递。在

所有其他方法都必须进行类似的修改。在

注意,只要设置name = n就设置了一个局部变量name,该变量在方法结束时就消失了;它不会在实例上设置任何内容。如果需要实例属性,则必须显式设置self.name。在

另外,这是一个样式问题,但是通常不会用Python编写set和{}方法。通常的做法是直接设置和获取属性。如果要验证值,请改用属性。所以基本上,你的方法中没有一个是必要的。在

但是,您没有__init__()方法。通常在实例化类时传递实例所需的属性,并将这些属性保存在实例上。在

^{pr2}$

相关问题 更多 >