json数据格式

json是一种轻量级的数据交互格式,可以按照json指定的格式去组织和封装数据
json本质是带有特定格式的字符串
功能:在各个编程语言中流通的数据格式,负责不同编程语言的数据传递和交互。类似于:

  • 国际通用语言-英语
  • 普通话

示例:
Python格式数据–>json数据格式–>c语言数据可用的数据格式
c语言格式数据–>json数据格式–>Python可用的数据格式

json格式数据转化

json数据格式示例:

1
2
{"name":"admin","age":18}
[{"name":"admin","age":18},{"name":"root","age":16}]

python数据和json数据相互转化

1
2
3
4
5
6
7
8
# 导入json模块
import json
# 准备符合格式json格式要求的Python数据
data = [{"name":"rminit","age":16},{"name":"rikka","age":16}]
# 通过json.dumps(data)方法把Python数据转化为json数据
data = json.dumps(data)
# 通过json.loads(data)方法把json数据转化为python数据
data = json.loads(data)

如果有中文可以带上:ensure_ascii = False来确保中文正常转化

pycharts模块

概况:
Echarts是一个有百度开源的数据可视化,凭借良好的交互性,精巧的图表设计,得到众多的开发者认可。Python是门富有表达力的语言,很适合用作数据处理。当数据分析遇上数据可视化时, pyecharts便诞生了。

可以在官网画廊里预览图表效果

安装pyecharts模块

pip install pyecharts

类的定义和使用

1
2
3
4
class 类名称
类的属性

类的行为

创建类
对象 = 类名称()

范例:

1
2
3
4
5
6
class Student:
name = None
age = None

def say_hello(self):
print(f"hi, I'm {self.name}")

self是必须填写的,在方法内部调用属性时,需要使用这个关键字

类只是一种程序内的设计蓝图,需要基于蓝图搭建实体,才能正常工作,这便是面向对象编程思想。

类的构造方法

__init__()
可以实现:

  • 创建类对象的时候,自动执行
  • 创建类对象的时候,将传入参数自动传__init__方法使用。

使用__init__方法可以省略定义类的属性

构造方法也是内在方法,也需要使用self关键字

类的内置方法

内置方法(也叫魔术方法)

  • __init__ 构造方法
  • __str__ 字符串方法
  • __lt__ 小于、大于符号比较
  • __le__ 小于等于、大于等于符号比较
  • __eq__ ==符号比较

__str__方法

1
2
3
4
class student:
def __init__(self, name ,age):
self.name = name
self.age = age

当类对象需要转化为字符串时,会输出内存地址
内存地址没有多大的作用,我们可以通过__str__方法,控制类转化为字符串的行为
示例:

1
2
3
4
5
6
class Student:
def __init__(self, name, age):
self.name = name
self.age = age
def __str__(self):
return f"Student类对象,name:{self.name},age:{self.age}"

__lt__方法

直接对两个对象进行比较是不可以的,但是类中__lt__方法,即可同时实现小于和大于符号两种比较

范例:

1
2
3
4
class Student:
...
def __lt__(self, other):
return self.age < other.age
  • 方法名:__lt__
  • 传入参数:other,另一个类对象
  • 返回值:truefalse

__le__方法,__eq__方法和__lt__方法类似

封装

面向对象的3大主要特性:

  • 封装
  • 继承
  • 多态

封装表示的是,将现实事物的:

  • 属性
  • 行为

封装到类中,描述为:

  • 成员变量
  • 成员方法

私有成员

对应现实事物不公开的属性的行为
类中提供私有成员的的形式:

  • 私有成员变量
  • 私有成员方法

定义私有成员的方法,只需要:

  • 私有成员变量:变量名以__开头(两个下划线)
  • 私有成员方法:方法名以__开头(两个下划线)

私有方法无法直接被类对象使用
私有变量无法赋值,也无法获取值
私有成员无法使用,但是可以被其他成员使用
范例:

1
2
3
4
5
6
7
8
9
10
11
12
class Phone:
__current_voltage = None

def __keep_single_core(self):
print("let cpu single core run")

def call_by_5g(self):
if self.__current_voltage >= 1:
print("5g call start!")
else:
self.__keep_single_core()
print("batter")

私有成员的意义:
在类中提供仅供内部使用的属性和方法,而不对外开发(类对象无法使用)

继承

继承表示:将从父类那里继承(复制)成员变量和成员方法(不含私有)
继承分为:

  • 单继承
  • 多继承

单继承语法:

1
2
class 类名(父类名):
类内容体

多继承语法:

1
2
class 类名(父类1, 父类2, ...):
类内容体

多继承结合父类时,不想添加内容体时,可以写入pass关键字

复写

子类继承父类成员属性和成员方法后,如果对其“不满意”,可以进行复写。
即:在子类中重新定义同名的属性或方法即可。

调用父类同名成员

一旦复写父类成员,那么类对象调用成员的时候,就会调用复写后的新成员
如果需要使用被复写的父类的成员,需要特殊的调用方式:

方式1:

  • 调用父类成员
    使用成员变量:父类名.成员变量
    使用成员方法:父类名.成员方法
    方式2:
  • 使用super()调用父类成员
    使用成员变量:super().成员变量
    使用成员方法:super().成员方法()

类型注解

在代码中涉及数据交互的地方,提供数据类型的注解(显示说明)
主要功能:

  • 帮助第三方IDE工具(如PyCharm)对代码进行类型推断,协助做代码提示
  • 帮助开发者对其变量进行注释

支持:

  • 变量的类型注解
  • 函数(方法)形参列表和返回值的类型注解

基础语法:
变量:类型
示例:

1
2
var_1: int = 10
my_list: list = [1, 2, 3]

详细注解:

1
2
3
4
my_list: ini[int] = [1, 2, 3]
my_touple: tuple[str, int, bool] = ("itheima", 666, True)
my_set: set[int] = {1, 2, 3}
my_dict: dict[str, int] = {"itheima", 666}

类型注解仅仅是提示性的,并非决定性的
例如var_1:int = "itheima"并不会报错

函数(方法)的-形参注解
代码示例:

1
2
def 函数方法名(形参名: 类型, 形参名: 类型, ......):
pass

返回值注解:
代码示例:

1
2
def 函数方法名(形参: 类型, ......, 形参: 类型) -> 返回值类型:
pass

Union类型

使用Union[类型,...,类型]可以定义联合类型注解

需要导入Union模块,from typing import Union

多态

多态,指的是:多种状态,即完成某个行为时,使用不同的对象会得到不同的状态。
多态常作用在继承关系上,比如:

  • 函数(方法)形参声明接受父类对象
  • 实际传入父类的子类对象进行工作

即:

  • 以父类做定义声明
  • 以子类做实际工作
  • 用以获得同一行为,不同状态
1
2
3
4
5
6
7
8
9
10
11
class Animal:
def speak(self):
pass

class Dog(Animal):
def speak(self):
print("狗叫是吧!")

class Cat(Animal):
def speak(self):
print("喵喵喵")

可以注意到父类Animal时空实现,这种设计的含义是:

  • 父类用来确定有哪些方法
  • 具体方法实现则由子类决定

这种写法,就叫作抽象类(也可以称之为接口)
抽象类:含有抽象方法的类
抽象方法:方法体是空实现(pass)称之为抽象方法

配合多态,完成

  • 抽象父类设计(设计标准)
  • 具体子类实现(实现标准)