![](/img/trans.png)
[英]TypeError in python 3.x ('int' object is not subscriptable)
[英]TypeError in Python 3.x
我不知道出了什么问题! 这是一个非常简单的程序,我做了很多头敲打! 请有人赐教!
这是CSE 111 - Programming Language II课程中的实验室问题。 他们在大学教Java,我用Java编写的代码工作得很好。
我只需要创建一个带有一些字段的Student类来保存学生的基本信息,并获取获取和设置属性的方法。 然后创建该类的实例并尝试使用这些方法。 但每次运行此程序时都会发生以下错误:
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_name()
应该被写入:
def set_name(self, n):
self.name = n
这与其他语言有些不同,在这些语言中有一个引用当前对象的内置关键字(例如this
)。 Python将该引用显式传递,作为方法的参数。
必须类似地修改所有其他方法。
请注意,只需设置name = n
设置一个局部变量name
,该name
在方法结束时消失; 它没有在实例上设置任何内容。 如果需要实例属性,则必须显式设置self.name
。
此外,这是一个风格问题,但您通常不会在Python中编写set
和get
方法。 通常的做法是直接设置和获取属性。 如果要对值进行验证,请改用属性。 所以基本上,你的方法都不是真正必要的。
但是,您没有__init__()
方法。 通常,在实例化类时将传递实例的所需属性,并将它们保存在实例上。
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)
尝试这个:
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
这是因为方法的第一个参数是self
- 类实例。
看看自我的目的是什么? 和http://docs.python.org/tutorial/classes.html#class-objects
在Python中,您需要为每个成员函数传递self
。 如果希望它们生效,您还需要将类变量引用为self.x
以下是您需要应用于其余代码的几个示例。
def set_name(self, n):
self.name = n
def get_cgpa(self):
return self.cgpa
有一些解释为什么在文档中就是这种情况。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.