bio911 发表于 2023-7-19 16:55:08

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

书中的例子:
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参数将自动传入方法,并指向该实例对象。

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

希望这能解答您的问题,如果还有疑问,请随时提问。

isdkz 发表于 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参数,以便在这个方法被一个对象(实例)调用时,这个方法知道它是被哪个对象调用的。

叼辣条闯世界 发表于 2023-7-20 10:06:21

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

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

关于绑定的概念,它是指将方法与对象关联起来的过程。在Python中,当我们通过实例对象调用方法时,该方法会自动接收实例对象作为第一个参数,即self。这个过程就是绑定,它使得方法能够访问实例对象的属性和方法。通过绑定,我们可以在方法内部操作实例对象的数据,实现对象的行为。

bio911 发表于 2023-7-20 11:27:21

isdkz 发表于 2023-7-19 17:02
在Python中,类的方法需要一个特殊的参数来代表实例本身。这个特殊的参数通常被称为self 。这是一个约定 ...

感谢大佬回复,使我对类这章学习有了更深刻的了解,感谢感谢。
页: [1]
查看完整版本: Python第2版(第154页)例子代码问题以及理解问题