鱼C论坛

 找回密码
 立即注册
查看: 676|回复: 4

[已解决]萌新关于函数,对象后面的括号的疑问

[复制链接]
发表于 2019-1-24 23:20:52 | 显示全部楼层 |阅读模式
1鱼币
想知道这个括号对于一个函数,一个类意味着什么
带和不带括号有什么区别

我在做36讲的试一试
写了个乌龟的类
from random import randint
from random import choice

class Turtle:
    location = [randint(0,10),randint(0,10)]
    ap = 100
    def run(self):
        self.location[0] += choice([1,2])*choice([-1,1])
        self.location[1] += choice([1,2])*choice([-1,1])
        self.ap += -1
        if self.location[0] > 10:
            self.location[0] = 20 -self.location[0]
        if self.location[0] < 0:
            self.location[0] = -self.location[0]
        if self.location[1] > 10:
            self.location[1] = 20 -self.location[1]
        if self.location[1] < 0:
            self.location[1] = -self.location[1]

如果输入
a = Turtle
a.run()
会报错
TypeError: run() missing 1 required positional argument: 'self'


但是如果是
a = Turtle()
a.run()
就能正常运行
为什么???????


最佳答案
2019-1-24 23:20:53
情况A:a = Turtle() 表示将a实例化为Turtle()类的一个对象,并传递了一个空参数
情况B:a = Turtle   表示将a实例化为Turtle()类的一个对象,没有传递任何参数
所以当a调用run方法时,由于定义中必须要有个参数才能执行,情况A延用空参数符合要求顺利执行;情况B没有参数报错
你可以尝试在情况B中传递一个参数给run方法,应该是可以顺利运行的,比如a.run(a)

最佳答案

查看完整内容

情况A:a = Turtle() 表示将a实例化为Turtle()类的一个对象,并传递了一个空参数 情况B:a = Turtle 表示将a实例化为Turtle()类的一个对象,没有传递任何参数 所以当a调用run方法时,由于定义中必须要有个参数才能执行,情况A延用空参数符合要求顺利执行;情况B没有参数报错 你可以尝试在情况B中传递一个参数给run方法,应该是可以顺利运行的,比如a.run(a)
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2019-1-24 23:20:53 | 显示全部楼层    本楼为最佳答案   
情况A:a = Turtle() 表示将a实例化为Turtle()类的一个对象,并传递了一个空参数
情况B:a = Turtle   表示将a实例化为Turtle()类的一个对象,没有传递任何参数
所以当a调用run方法时,由于定义中必须要有个参数才能执行,情况A延用空参数符合要求顺利执行;情况B没有参数报错
你可以尝试在情况B中传递一个参数给run方法,应该是可以顺利运行的,比如a.run(a)
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2019-1-25 01:25:04 | 显示全部楼层
对于一个类,意味着将它实例化为对象;
对于一个函数,意味着将它调用。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2019-1-25 08:03:05 | 显示全部楼层
self参数的函数是给实例化对象使用的,Turtle()才是实例化对象
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 2019-1-26 00:03:08 | 显示全部楼层
zhangkaihang 发表于 2019-1-24 23:20
情况A:a = Turtle() 表示将a实例化为Turtle()类的一个对象,并传递了一个空参数
情况B:a = Turtle   表示将 ...

懂了,谢谢
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-4-27 21:33

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表