Python类
1 面向对象概述
- 编程语言根据代码的组织方式不同,可分为以下两种:
- 面向过程编程语言:就是分析出所要处理的事情,并按步骤列好,然后一步一步实现,类似流水线工作原理。
- 面向对象编程语言:就是把要处理的事情分解成各个对象,程序通过各个对象之间的交互执行来解决问题。
1.1 面向对象的由来
- 面向过程编程机制对于复杂程序的可扩展性和可维护性极差。
- 面向过程编程的代码易读性差,不符合人类观察和处理问题的思路,要是复杂的代码更是难认理解。
1.2 面向对象核心思想
面向对象的核心思想是将问题中的各个事物抽象出来,封装成能够完整描述该实体功能的类,然后通过类之间的交互来解决问题。类是一个模板,对象是类的一个实例,一个可以实例化多个对象,而对象是面向对象编程的基本单位。
1.3 面向对象特点
- 封装:分析出可变化的部分并将其封装起来,这样对变化部分进行修改时就不会影响其它部分的代码了,解决了程序的可扩展性。
- 继承:类可被继承,如子类继承父类,就继承父类的方法及属性,实现了代码的重用,解决了程序的重用性和扩展性。
- 多态:接口多种不同的实现方式就是多态,接口的存在是为不相关的类提供通用的服务,解决了程序的可维护性和可扩展性。
2 创建类
类由属性和方法组成,属性是对数据的封装,方法是对行为的封装,使用类几乎可以模拟任何事物,在Python中创建类的关键字为 class,创建方式如下:
class Dog:
"""简单模拟一下小狗类"""
def __init__(self, name, age):
"""初始化属性姓名和年龄"""
self.name = name
self.age = age
def call(self):
"""小狗会叫"""
print(f"{self.name} 正在叫,旺旺旺!")
def run(self):
"""小狗会跑"""
print(f"{self.name} 正在跑!")
- class后面是类名,表示一个抽象的事物,命名规范为首字母大写
- 第2行是一个字符串的注释说明,用于对类的功能做个描述
- _init_() 是类的一个特殊方法,叫构造函数,在创建类实例时会自动调用
- _init_()方法内可定义类的属性,以self为前缀的变量可供类中的所有方法使用
- 类还定义了2个方法,call和run
3 创建对象
有了类之后就可以创建对象了,对象是类的实例,创建对象就是类实例化的过程,下面来创建一个名字叫大黄,年龄为3岁的小狗:
dog = Dog('大黄', 3)
print(f"dos的名称叫:{dog.name},年龄:{age}岁")
4 类的属性
4.1 按级别分
- 类级别属性
- 实例级别属性:属性值默认共享类级别的属性值,除非进行显示的赋值操作
4.2 按使用范围分
- 公有属性:类中和类外都可调用的属性,变量默认为公有属性
- 私有属性:以双下划线“__”开始的变量就是私有属性,不能被类以外的函数调用
- 内置属性:被双下划线“__”包起来的属性称为内置属性,由Python在定义时自动添加
内置类属性有:
- name:类的名字
- doc:类的文档字符串
- bases:所有父类构成的元组
- dict:类的属性
- module:定义类所在的模块
- class:实例对应的类
内置实例属性有:
- class:实例对象所属的类名
- dict:实例对象的属性
5 类的方法
5.1 公有方法
不能被类直接调用,需要实例化后由对象调用。
5.2 私有方法
不能被外部的类和方法调用,定义方式也是在方法前面加上双下划线“__”。
5.3 类方法
能被类和对象所调用,被 classmethod 函数调用 或用 @classmethod 声明的方法为类方法。
5.4 静态方法
又称全局方法,能被类调用,也可被所有实例化对象共享。通过调用staticmethod方法或使用@staticmethod修饰来声明,无需self语句
- 类的各个方法示例如下:
def Pub(self): # 公有方法
pass
def __Pri(self): # 私有方法
pass
def Bln(self): # 类方法,被 classmethod 函数调用的方法为类方法
Bln_A = classmethod(Bln)
@classmethod
def Bln(self): # 类方法,用 @classmethod 声明的方法为类方法
pass
def Bln(self): # 静态方法,被 staticmethod函数调用的方法为静态方法
Bln_A = staticmethod(Bln)
@staticmethod
def Bln(self): # 静态方法,用 @staticmethod声明的方法为静态方法
pass
类方法与静态方法的区别:
- 静态方法不能使用self的方式调用。
- 静态方法会预先将类中用到的属性和方法进行加载,而类方法则是在调用的时候再加载。因此静态方法更占资源,但是速度较快。
- 静态方法访问类中属性使用“类名.属性”的格式。
6 导入类
Python允许将类存储在模块(.py文件)中,在需要使用时再将其导入。
6.1 导入单个类
from 模块名 import 类名
6.2 从一个模块中导入多个类
from 模块名 import 类名1, 类名2, 类名N
6.3 从一个模块导入所有类
from 模块名 import *
6.4 使用别名
from 模块名 import 类名 as 别名