Python3.x中的TypeError
我不知道怎么了!这是一个非常简单的程序,我已经做了很多的头部撞击!请有人开导我 这是CSE111-编程语言II课程中的一道实验题。他们在大学里教Java,我用Java编写的代码工作得很好 我只需要创建一个包含一些字段的Student类来保存有关Student的基本信息,并使用方法来获取和设置属性。然后创建该类的实例并试用这些方法。 但每次运行此程序时,都会出现以下错误:Python3.x中的TypeError,python,python-3.x,typeerror,Python,Python 3.x,Typeerror,我不知道怎么了!这是一个非常简单的程序,我已经做了很多的头部撞击!请有人开导我 这是CSE111-编程语言II课程中的一道实验题。他们在大学里教Java,我用Java编写的代码工作得很好 我只需要创建一个包含一些字段的Student类来保存有关Student的基本信息,并使用方法来获取和设置属性。然后创建该类的实例并试用这些方法。 但每次运行此程序时,都会出现以下错误: TypeError: set_name() takes exactly 1 positional argument (2 gi
TypeError: set_name() takes exactly 1 positional argument (2 given)
这是我写的代码
class Student:
'''Student class'''
name = None
id = 0
address = None
cgpa = None
def get_name():
return name
def set_name(n):
name = n
def get_id():
return id
def set_id(i):
id = i
def get_address():
return address
def set_address(a):
address = a
def get_cgpa():
return cgpa
def set_cgpa(c):
cgpa = c
#An object of Student class
jack = Student()
jack.set_name('jacky')
print(jack.get_name())
您不接受引用您的实例作为该方法的第一个参数,即您的
set\u name()
应写入:
def set_name(self, n):
self.name = n
这与其他语言有所不同,其他语言中有一个指向当前对象的内置关键字(如This
)。Python将该引用作为参数显式传递给该方法
所有其他方法都必须进行类似的修改
注意,只要设置name=n
就可以设置一个局部变量name
,该变量在方法结束时消失;它不会在实例上设置任何内容。如果需要实例属性,则必须显式设置self.name
另外,这是一个风格问题,但是您通常不会用Python编写set
和get
方法。通常的做法是直接设置和获取属性。如果要验证值,请改用属性。所以基本上,你的方法没有一个是真正需要的好风格
但是,您没有\uuuu init\uuuu()
方法。通常,在实例化类时,您会传递实例所需的属性,并将这些属性保存在实例上
class Student:
def __init__(self, name, id, address, cgpa):
self.name = name
self.id = id
self.address = address
self.cgpa = cgpa
herman = Student("Herman Munster", 12345, "1313 Mockingbird Lane", 4.0)
这是因为方法的第一个参数是类实例
class Student:
def __init__(self, name, id, address, cgpa):
self.name = name
self.id = id
self.address = address
self.cgpa = cgpa
herman = Student("Herman Munster", 12345, "1313 Mockingbird Lane", 4.0)
看
在Python中,您需要为每个成员函数传入
self
。如果希望类变量生效,还需要将它们引用为self.x
下面是几个示例,您需要将它们应用于代码的其余部分
def set_name(self, n):
self.name = n
def get_cgpa(self):
return self.cgpa
这种情况的原因有一些解释。试试这个:
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
。此外,您可能希望包括一个\uuuu init\uuu()
函数;这通常用于初始化任何成员变量,并在类的实例化时调用
请看一下Python文档,了解一些关于格式良好的类的示例:非常感谢!我是Python新手,对
self
:谢谢你的快速回答!谢谢不过您不必重写:)谢谢:)我不知道,因为我是Python的初学者。@mnzrr,是的,这很不寻常,但当您更多地使用Python时,它会很方便。再次感谢沃鲁克!我看了几本书,包括《Python的一个字节》,但没有看到任何关于self
:)我必须更仔细地阅读>:(是的:)我接受了kindall的答案,因为它更具描述性:)