Rat*_*tul 2 python typeerror python-3.x
我不知道出了什么问题!这是一个非常简单的程序,我做了很多头敲打!请有人赐教!
这是CSE 111 - Programming Language II课程中的实验室问题.他们在大学教Java,我用Java编写的代码工作得很好.
我只需要创建一个带有一些字段的Student类来保存学生的基本信息,并获取获取和设置属性的方法.然后创建该类的实例并尝试使用这些方法.但每次运行此程序时都会发生以下错误:
TypeError: set_name() takes exactly 1 positional argument (2 given)
Run Code Online (Sandbox Code Playgroud)
这是我写的代码.
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())
Run Code Online (Sandbox Code Playgroud)
您不接受对您的实例的引用作为该方法的第一个参数,即您set_name()应该写入:
def set_name(self, n):
self.name = n
Run Code Online (Sandbox Code Playgroud)
这与其他语言有些不同,在这些语言中有一个this引用当前对象的内置关键字(例如).Python将该引用显式传递,作为方法的参数.
必须类似地修改所有其他方法.
请注意,只是设置name = n设置一个局部变量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)
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
255 次 |
| 最近记录: |