首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Python练习

Python练习
EN

Stack Overflow用户
提问于 2014-04-22 08:10:58
回答 4查看 4K关注 0票数 1

我正在努力学习使用Python中的类,并编写了这个测试程序。这在某种程度上是基于我在Stack OverFlow上发现的另一个问题中的代码。

代码如下:

代码语言:javascript
复制
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给定)“。在我的操作中,我没有给出任何参数,但是我去掉了括号,给出了代码

代码语言:javascript
复制
Steve.list_values
Johnny.list_values
Penny.list_values

这样就不会出现错误,但是不会做任何事情--什么都不会被打印。

我的问题:

  1. 括号是怎么回事?
  2. 打印声明是怎么回事?
EN

回答 4

Stack Overflow用户

发布于 2014-04-22 08:12:44

Python要求将self参数显式地添加到成员函数中,忘记将self添加到函数解密:

代码语言:javascript
复制
def list_values(self):

这将它定义为Student类的成员函数。见这里。当您将函数作为Student实例的成员调用时,将隐式地添加self变量,从而触发异常,因为您没有定义一个名为list_values的函数,该函数接收一个参数。

至于删除括号,这意味着您不是在调用函数,而是只引用函数对象,什么都不做。

票数 1
EN

Stack Overflow用户

发布于 2014-04-22 08:13:10

需要将list_values方法绑定到Student实例:

你应该改变:

代码语言:javascript
复制
def list_values()

至:

代码语言:javascript
复制
def list_values(self)

关于原因的解释,见:

此外,Guido的这篇博客文章也涵盖了这个主题:

  • http://neopythonic.blogspot.com.au/2008/10/why-explicit-self-has-to-stay.html
票数 1
EN

Stack Overflow用户

发布于 2014-04-22 08:12:44

def list_values():应该是:def list_values(self):

在Python中,实例方法将self作为第一个参数。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/23214027

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档