鱼C论坛

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

[已解决]Python第2版(第154页)例子代码问题以及理解问题

[复制链接]
发表于 2023-7-19 16:55:08 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
书中的例子:
class BB:
    def printBB():
        print("no zuo no die")

bb = BB()
bb.printBB()
是报错的

自己试着:
class BB:
    def printBB(self):
        print("no zuo no die")

bb = BB()
bb.printBB()
却可行
不明白是为什么,求大佬解惑,另外这个绑定到底是什么意思书中举例我理解不了~~也请大佬帮忙简洁告知下。
最佳答案
2023-7-19 16:55:22
在第154页的例子中,代码class BB:def printBB():print("no zuo no die")bb = BB()bb.printBB()报错是因为printBB方法没有正确定义。

在Python中,类的方法需要显式地将实例对象作为第一个参数传递给方法。通常,这个参数被称为self,它表示对当前实例对象的引用。

因此,在您提供的修正后的代码中,def printBB(self):定义了一个带有self参数的方法,将实例对象绑定到方法中。这样,当通过实例对象调用bb.printBB()时,self参数将自动传入方法,并指向该实例对象。

关于绑定的理解:在面向对象编程中,绑定是指将方法与对象关联起来。当通过实例对象调用方法时,方法将自动接收到实例对象作为第一个参数,并且可以访问实例对象的属性和方法。这种方式称为实例方法的绑定。而如果将方法与类关联起来,则称之为类方法的绑定。

希望这能解答您的问题,如果还有疑问,请随时提问。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2023-7-19 16:55:22 | 显示全部楼层    本楼为最佳答案   
在第154页的例子中,代码class BB:def printBB():print("no zuo no die")bb = BB()bb.printBB()报错是因为printBB方法没有正确定义。

在Python中,类的方法需要显式地将实例对象作为第一个参数传递给方法。通常,这个参数被称为self,它表示对当前实例对象的引用。

因此,在您提供的修正后的代码中,def printBB(self):定义了一个带有self参数的方法,将实例对象绑定到方法中。这样,当通过实例对象调用bb.printBB()时,self参数将自动传入方法,并指向该实例对象。

关于绑定的理解:在面向对象编程中,绑定是指将方法与对象关联起来。当通过实例对象调用方法时,方法将自动接收到实例对象作为第一个参数,并且可以访问实例对象的属性和方法。这种方式称为实例方法的绑定。而如果将方法与类关联起来,则称之为类方法的绑定。

希望这能解答您的问题,如果还有疑问,请随时提问。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2023-7-19 17:02:12 | 显示全部楼层
在Python中,类的方法需要一个特殊的参数来代表实例本身。这个特殊的参数通常被称为  self 。这是一个约定俗成的规则,并不是强制性的,你也可以使用其他名称,但是  self  是最常用的。

当你在类的定义中调用一个方法时,Python会自动将当前的实例(也就是调用该方法的对象)作为第一个参数传入。这就是为什么你需要在方法的参数列表中包括  self  参数的原因。

在你的例子中:
class BB:
    def printBB():
        print("no zuo no die")

bb = BB()
bb.printBB()

这段代码会报错,因为  printBB  方法在被调用时期望接收一个参数(这个参数是Python自动提供的,代表调用这个方法的实例),但是在定义  printBB  方法时你并没有提供这个参数,所以会出现错误。

而在你的第二个例子中:
class BB:
    def printBB(self):
        print("no zuo no die")

bb = BB()
bb.printBB()

这段代码可以正确运行,因为  printBB  方法在定义时接收了一个参数  self 。当  bb.printBB()  被调用时,  bb  会作为  self  参数传递给  printBB  方法。

这就是Python的方法绑定机制。这个机制允许一个方法知道它被哪个对象(实例)调用。实际上,当你调用  bb.printBB()  时,Python实际上在后台执行的是  BB.printBB(bb) 。

综上,当你在Python的类定义中创建一个方法时,你需要包含一个  self  参数,以便在这个方法被一个对象(实例)调用时,这个方法知道它是被哪个对象调用的。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2023-7-20 10:06:21 | 显示全部楼层
在第一个例子中,当调用bb.printBB()时会导致报错。这是因为在方法printBB的定义中没有传入任何参数,而在调用时却提供了一个隐含的参数self。在Python中,类的方法必须至少接受一个参数,通常被命名为self,用于表示该方法所属的实例对象。

修正后的第二个例子中,我们在方法printBB的定义中添加了参数self,用于接受实例对象。这样在调用方法bb.printBB()时,实例对象bb会被自动传递给方法,可以成功执行。

关于绑定的概念,它是指将方法与对象关联起来的过程。在Python中,当我们通过实例对象调用方法时,该方法会自动接收实例对象作为第一个参数,即self。这个过程就是绑定,它使得方法能够访问实例对象的属性和方法。通过绑定,我们可以在方法内部操作实例对象的数据,实现对象的行为。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2023-7-20 11:27:21 | 显示全部楼层
isdkz 发表于 2023-7-19 17:02
在Python中,类的方法需要一个特殊的参数来代表实例本身。这个特殊的参数通常被称为  self 。这是一个约定 ...

感谢大佬回复,使我对类这章学习有了更深刻的了解,感谢感谢。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-12-26 09:07

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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