我正在努力学习使用Python中的类,并编写了这个测试程序。这在某种程度上是基于我在Stack OverFlow上发现的另一个问题中的代码。
代码如下:
class Student(object):
name = ""
age = 0
major = ""
# The class "constructor" - It's actually an initializer
def __init__(self, name, age, major):
self.name = name
self.age = age
self.major = major
def list_values():
print "Name: ", self.name
print "Age: ", self.age
print "Major: ", self.major
def make_student(name, age, major):
student = Student(name, age, major)
return student
print "A list of students."
Steve = make_student("Steven Schultz",23,"English")
Johnny = make_student("Jonathan Rosenberg",24,"Biology")
Penny = make_student("Penelope Meramveliotakis",21,"Physics")
Steve.list_values()
Johnny.list_values()
Penny.list_values()当我运行它时,得到错误"TypeError: list_values()不带参数(1给定)“。在我的操作中,我没有给出任何参数,但是我去掉了括号,给出了代码
Steve.list_values
Johnny.list_values
Penny.list_values这样就不会出现错误,但是不会做任何事情--什么都不会被打印。
我的问题:
发布于 2014-04-22 08:12:44
Python要求将self参数显式地添加到成员函数中,忘记将self添加到函数解密:
def list_values(self):这将它定义为Student类的成员函数。见这里。当您将函数作为Student实例的成员调用时,将隐式地添加self变量,从而触发异常,因为您没有定义一个名为list_values的函数,该函数接收一个参数。
至于删除括号,这意味着您不是在调用函数,而是只引用函数对象,什么都不做。
发布于 2014-04-22 08:13:10
需要将list_values方法绑定到Student实例:
你应该改变:
def list_values()至:
def list_values(self)关于原因的解释,见:
此外,Guido的这篇博客文章也涵盖了这个主题:
发布于 2014-04-22 08:12:44
def list_values():应该是:def list_values(self):
在Python中,实例方法将self作为第一个参数。
https://stackoverflow.com/questions/23214027
复制相似问题