类的构造方法
链接:类
- 调用时间:在对象被实例化时被程序自动调用
- 作用:用于对象创建时初始化
- 书写格式:init前后分别是两个下划线
- 程序不显示定义init方法,则程序默认调用一个无参init方法
- 对象创建过程
实例1:
1 | class Dog: |
结果:
1 | 我是构造方法,在创建对象时自动调用 |
设置对象属性
创建对象过程
实例2:
1 | class Dog: |
结果:
1 | man |
类的访问权限
修改对象属性的方法
- 方法1:对象变量名.属性 = 新值
- 方法1的问题:
- 可能修改的属性值不合法
- 在类的外部可以随意修改类的内部属性
- 方法2:对象变量名.内部修改属性方法
实例3:
1 | class Dog: |
结果:
1 | 100 |
实例4:
1 | class Dog: |
结果:
1 | gender:male,variety:golden,name:wangcai,age:10 |
私有属性
- 定义:__私有变量名
- 只能在类内部使用,类外部不能访问,否则报错
实例5:
1 | ##将age变为私有属性 |
结果:
1 | gender:man,variety:golden,name:wangcai,age:20 |
私有方法
- 只有在类内部调用,在类的外部无法调用
- 定义私有方法在方法名前添加两个下划线
- 类内部调用私有方法要使用self.私有方法的方式调用
实例6:
1 | #私有方法的使用 |
结果:
1 | 接头成功! |
继承
在程序中,继承描述的是类中类型与子类型之间的所属关系,例如猫和狗都属于动物
单继承
子类继承一个父类,在定义子类时,小括号()中写父类的类名
父类的非私有属性、方法,会被子类继承
子类中方法的查找方式:先查找子类中对应的方法,如果找不到,再到父类中查找
子类可以继承父类的属性和方法,也可以继承父类的非私有属性和方法,依次类推
在子类中调用父类的方法:ClassName.methodname(self)
实例7:
1 | class Animal: |
结果:
1 | dog构造方法 |
重写父类方法
子类对父类允许访问的方法的实现过程进行重新编写
在子类中定义与父类同名的方法
优点:子类可以根据需要,定义合适的方法实现逻辑
实例8:
1 | class Animal: |
结果:
1 | ---animal构造方法---- |
多继承
object 类是所有类的基类,在定义类的时候不需要显示的在括号中表明继承自object类
多继承:一个子类可以继承多个父类
多继承定义方式:在类名后的括号中添加需要继承的多个类名
多继承中,如果多个类中有同名的方法,子类调用查找方法的顺序是按照小括号内继承父类从左到右的顺序查找,第一个匹配方法名的父类方法将会被调用
实例9:
1 | #多继承中方法的名称尽量不一样,要不然会出现不必要的错误和困扰,比如下面的data_handle |
结果:
1 | 人脸识别 |
多态
一个抽象类有多个子类,不同的类表现出多种形态
实例10:
1 | #子类的的方法是会覆盖掉父类的方法,只有存在继承,才能存在多态 |
结果:
1 | Dog正在吃饭 |