Python类的绑定方法和非绑定方法实例解析

  

<强>一、绑定方法
  

  

1。对象的绑定方法
  

  

首先我们明确一个知识点,凡是类中的方法或函数,默认情况下都是绑定给对象使用的。下面,我们通过实例,来慢慢解析绑定方法的应用。

        类人:   def __init__(自我、名字、年龄):   self.name=名字   自我。年龄=年龄   def谈话(自我):   通过      p=人(小华,18)   打印(p.talk)      输出结果:   人& lt;约束方法。谈论& lt; __main__。,人们在0 x000000f802c69358>对象的在      

从上面的输出结果来看,谈()這个类中的方法,是绑定给对象使用的。下面,我在看看另外一种情况。

        类人:   def __init__(自我、名字、年龄):   self.name=名字   自我。年龄=年龄   def谈话():   通过      p=人(小华,18)   打印(p.talk)      输出结果:   人& lt;约束方法。谈论& lt; __main__。,人们在0 x000000ff68f39358>对象的在      

现在,我们将讨论()函数的参数去掉,结果显示与上面是一样。这说明,不管是类中的方法,还是类中函数,默认情况下都是绑定给对象使用的。绑定给对象使用有一种好处,那就是不用手动将对象传入。对象是自动传到类中,如果你不信,我们来看看下面的例子:

        类人:   def __init__(自我、名字、年龄):   self.name=名字   自我。年龄=年龄   def谈话():   通过      p=人(小华,18)   打印(People.talk)   打印(p.talk)      输出结果:   & lt;函数。在0 x000000c54e3d0a60>类来调用仅仅是当作函数使用   人& lt;约束方法。谈论& lt; __main__。人反对在0 x000000c54e249358>比;而对象来调用则为绑定方法      

上面很好说明了,如果类来调用类中的方法,那么这个方法仅仅只是一个函数,那么既然是函数,就不会有自动传值这一功能。来看看下面代码:

        类人:   def __init__(自我、名字、年龄):   self.name=名字   自我。年龄=年龄   def谈话(自我):   通过   p=人(小华,18)   People.talk () 1   p.talk () 2      #代码1处报的错   谈()失踪1所需的位置参数:“自我”   #代码2处正常      

从上面输出结果来看,当类调用类中的方法时候,我是不会进行自动传值的,也就是说,函数有几个参数,我们就得传递进去几个参数。如果想结果正常运行,那么在类名调用谈话()的时候,将参数一一都传递进去。即:

  

People.talk (312312)
  

  

這个参数可以是任意的,但是,必须传递进去,而当对象调用类中方法时候,则不用传递,如上面2的正常执行。既然知道了区别,那么,我们来看看下面代码:

        类人:   def __init__(自我、名字、年龄):   self.name=名字   自我。年龄=年龄   def谈话():   通过      p=人(小华,18)   People.talk () 1   p.talk () 2      # 1处正常执行   # 2处报的错   谈()接受0位置参数,但1给出了      

从输出结果来看,人来调用谈话()方法时候,并不需要传递参数;而当对象来调用谈话()的时候,由于对象调用自己的绑定方法,会自动将对象当作第一个参数传递进去,所以,当类中谈()方法没有带参数时,而你又给它传递了一个,显然是会报错的。

  

综上所述,我们可以得出以下结论:

  

1。凡是类中的方法和函数,都是绑定给对象使用的;

  

2。绑定方法都有自动传值的功能。传递进去的值,就是对象本身。

  

3。如果类想调用绑定方法,就必须遵循函数的参数规则,有几个参数,就必须传递几个参数。

  

聪明的你,可能会问,既然类中的方法都是绑定给对象使用的,那么有没有方法是绑定给类使用的呢?

  

答案是,当然有!

  

2。类的绑定方法
  

  

既然类中的方法,默认都是绑定给对象使用,那么,我们要采取一点措施,将类中的绑定方法解除对象绑定关系,进而绑定到类上。

  

在python中,引入了@classmethod方法,将类中的方法绑定到类身上。下面看看代码:

        类人:   @classmethod   def谈话(cls):   通过      p=人()   打印(People.talk)      #输出结果   人& lt;约束方法。& lt;课堂上讲话的__main__.People祝辞祝辞

Python类的绑定方法和非绑定方法实例解析