day15-类和对象2
一、类方法和静态方法
1.类中的方法
(1)对象方法
- 怎么声明:直接声明在类中的函数
- 怎么调用:通过对象来调用
- 特点:有个指向当前对象的默认参数
self
;调用的时候不需要传参 - 什么时候使用:实现函数的功能需要用到对象属性
(2)类方法
怎么声明:声明函数前加
@classmethod
怎么调用:通过类来调用,
类名.方法名()
-
特点:有个默认参数
cls
,这个参数在通过类调用的时候不需要传参;指向当前类(谁调用指向谁) 类能做到的事情,
cls
都可以 什么时候使用:实现函数的功能不需要对象属性的前提下需要类的字段(需要类),这个时候就使用类方法
(3)静态方法
- 怎么声明:声明函数前加
@staticmethod
- 怎么调用:通过类来调用,
类.方法名()
- 特点:没有特点(没有默认参数)
- 什么时候使用:实现函数的功能既不需要对象属性,也不需要类的字段的时候
二、私有化
1.访问权限
- 公开(public):属性和方法在类的内部可以使用、可以被继承也可以在类的外部使用
- 保护(protect):属性和方法在类的内部可以使用、可以被继承;不可以在类的外部使用
- 私有(private):属性和方法在类的内部可以使用、不可以被继承也不可以在类的外部使用
- python中本质上所有的属性和方法都是公开的,私有化是假的私有化
2.私有化
语法:在声明属性或方法的时候,在属性名前或者方法名前加__
;
注意:只能以__
开头,不能以__
结尾
python私有化的原理:只是单纯在属性或者方法名前加_类名
,导致直接使用原名使用不了属性和方法
三、getter和setter
1.什么时候使用getter和setter
- getter — 希望获取一个属性值之前做点别的事情,就给这个属性添加getter
- setter — 希望给属性赋值之前做点别的事情,就给这个属性添加setter
2.怎么给属性添加getter和setter
(1)怎么添加getter
- 在需要添加getter的属性前添加
_
- 在
@property
后面声明一个函数,函数名和去掉_
的属性名一致,并且函数需要一个返回值表示获取属性的值 - 在外面通过不带
_
的属性名去获取对应的属性值
(2)怎么添加setter
- 如果想要给数学添加setter,必须先给它添加getter
-
@getter名.setter
后声明函数;函数名和去点_
的属性名一致,这个函数不需要返回值,但是需要一个参数 - 在外面通过不带
_
的属性名去给属性赋值
四、继承
1.什么是继承
让子类直接拥有父类的属性和方法,这个过程就是继承
2.怎么继承
python中所有的类,默认都是继承字object类。(object是基类)
语法:class 类名(父类1,父类2,...)
继承发生后子类拥有父类的所有属性和方法
3.子类添加内容
(1)添加字段和方法
直接在子类中声明新的字段或者方法
(2)添加对象属性
补充:
类中的函数的调用:先看当前类中有没有这个方法,如果有直接调用;如果没有就看父类有没有这个方法,有的话就调用,如果没有就看父类的父类... 以此类推,如果找到基类都没有,程序才会报错
-
super的使用: 在子类对象方法和类方法都可以通过
super()
去调用父类的对象方法和类方法; 在子类的静态方法中不能够使用
super()