- 类对象
1 | class A(object): |
- 实例对象
1 | #接源码 |
- 类方法
1 | #接源码 |
类中@classmethod下方的是类方法,写法也是固定写法;其中cls必须要有,cls绑定了类对象A(),在类外部,需要这样引用A(类对象).类方法 ;因为类方法在类中能被直接引用,一般是这样引用self.类方法;这是由于self绑定的是实例对象,根据实例对象可以查找到类对象
使用场景
如果希望在方法裡面调用静态类,那么把方法定义成类方法是合适的,因为要是定义成静态方法,那么你就要显示地引用类A,这对继承来说可不是一件好事情。(为了方便调用,但又为了继承方便,因此不用静态方法,显示调用)
实例方法
1 | def m1(self, n): |
实例方法,必须带self;其中self绑定的实例对象a;因此外部使用可以这样使用,a.m1();在类的内部self绑定了实例对象,因此可以直接使用self.m1来调用
使用场景
需要将方法作为对象属性,进行调用,继承,传递的方法,大部分类方法都会定义成实例方法;
静态方法
1 | @staticmethod |
使用场景
如果在方法中不需要访问任何实例方法和属性,纯粹地通过传入参数并返回数据的功能性方法,那么它就适合用静态方法来定义,它节省了实例化对象的开销成本,往往这种方法放在类外面的模块层作为一个函数存在也是没问题的,而放在类中,仅为这个类服务(定义了一个局部域函数仅为该类专门服务)。
装饰器
1 | def A(FUN): |