方法是如何绑定到对象的?

面向对象讲了一堆,定义类,创建实例对象。
Q1:但是没有说为什么类中定义的以self为首参的函数会绑定到实例对象,明明def定义函数,传递的参数只是一个形参,而在类中def就会绑定到实例,实例对象调用类方法会隐式自动传参self(自己),如何做到。
Q2:类也是一种对象为什么不能直接定义cls函数,然后传递自己,而要通过装饰器classmethod。
感觉自己问题好多。

在通过实例对象调用方法时 func会被认为是实例对象的实例方法,会传递实例对象自身给方法的第一个参数(self),

而不使用修饰符,在用类名调用func时,func就只是类中的一个普通属性。只是属性的值是一个函数。
用类对象调用func函数。只是将func做为一个普通函数来调用的。func函数与类对象没什么关系,
和直接 func() 这样调用没区别,做为普通函数自然不会传递多于的参数
这与设置了@staticmethod 是类似的。

只有设置了 @classmethod 为类方法,在调用时才会传递类对象(cls)。