Python面向对象之数据封装的应用及配置文件
面向对象封装的应用
1.配置文件
1.1 ini配置文件
ini 文件是Initialzation File的缩写,平时用于存储软件的配置文件。例如:MySQL数据库的配置文件(my.ini)
[mysql]
# 设置mysql客户端默认字符集
default-character-set=utf8
[mysqld]
#设置3306端口
port = 3306
# 设置mysql的安装目录
basedir=D:\\softnew\\MYSQL\\mysql-5.7.20-winx64
# 允许最大连接数
max_connections=200
# 服务端使用的字符集默认为8比特编码的latin1字符集
character-set-server=utf8
# 创建新表时将使用的默认存储引擎
default-storage-engine=INNODB
[custom]
key1=value1
key2=this is my custom
[节点]
# 注释 #
键=值
[节点下可以有多对键值]
这种格式可以直接使用文件操作函数进行open,自己处理较麻烦,所以 Python 提供了更方便的方式。
1.2 configparser 包
1.2.1 获取节点
import configparser
# 实例化对象
config=configparser.ConfigParser()
# 读取文件
config.read('./my.ini',encoding='utf-8')
# 获取所有的节点
ret=config.sections()
print(ret)
# 输出
['mysql', 'mysqld', 'custom']
1.2.2 获取节点下的键值
# 实例化对象
config=configparser.ConfigParser()
# 读取文件
config.read('./my.ini',encoding='utf-8')
# 获取节点下的键值
# ret=config.items("custom")
# print(ret)#[('key1', 'value1'), ('key2', 'this is my custom')],返回元组键值(键,值)
# 循环获取键值
for key,value in config.items("custom"):
print(key,value)

1.2.3 获取节点下键对应的值
config=configparser.ConfigParser()
config.read('./my.ini',encoding='utf-8')
# 传入参数,节点,和键的名字
result=config.get("custom","key1")
print(result)
# 输出
>>> value1
1.2.4 其他
1.判断是否存在节点
# 判断是否存在节点
config=configparser.ConfigParser()
config.read('./my.ini',encoding='utf-8')
ret1=config.has_section("mysql")
ret2=config.has_section("aaaa")
print(ret1,ret2)
# 输出
>>> True False
- 添加与删除

2.面向对象的封装
# -*- coding: utf-8 -*-
'''
@Time : 2022/1/13 18:58
@Author : ziqingbaojian
@File : 01.封装应用-加载配置文件.py
'''
import configparser
class ConfigContext:
def __init__(self):
self.url=str
self.pool_size=int
self.debug=int
self.debug_ip=str
self.request_timeout=str
def load_config():
# 读取 ini 文件
config_parser=configparser.ConfigParser()
config_parser.read("settings.ini",encoding='utf-8')
obj=ConfigContext()
for key,convert in obj.__dict__.items():
# 获取settings中的值
value=config_parser.get('settings',key)
# 转换成指定的数据类型
target_type_value=convert(value)#将读取到的值进行转换
# 使用反射机制进行赋值
setattr(obj,key,target_type_value)
# 返回赋值好的对象
return obj
def run():
data_dict=load_config()
# 直接通过对象来获取配置文件中的内容
print(data_dict.url)
print(data_dict.pool_size,type(data_dict.pool_size))
if __name__ == '__main__':
run()


总结:体现了类的三大特性中的数据封装,经常用作小型软件的配置文件的使用。
继续努力,终成大器!
Python面向对象之数据封装的应用及配置文件的更多相关文章
- python 面向对象编程学习
1. 问题:将所有代码放入一个py文件:无法维护 方案:如果将代码才分放到多个py文件,好处: 1. 同一个名字的变量互相不影响 2.易于维护 3.引用模块: import module 2.包:解决 ...
- Python面向对象编程指南
Python面向对象编程指南(高清版)PDF 百度网盘 链接:https://pan.baidu.com/s/1SbD4gum4yGcUruH9icTPCQ 提取码:fzk5 复制这段内容后打开百度网 ...
- Python面向对象-day07
写在前面 上课第七天,打卡: 时间的高效利用: 前言: 今天egon老师补充了下 is 和 == 的区别,整理如下:Python中变量的属性以及判断方法 一.面向过程和面向对象 - 1.面向过程 核心 ...
- Python面向对象中的继承、多态和封装
Python面向对象中的继承.多态和封装 一.面向对象的三大特性 封装:把很多数据封装到⼀个对象中,把固定功能的代码封装到⼀个代码块, 函数,对象, 打包成模块. 这都属于封装思想. 继承:⼦类可以⾃ ...
- 三十九、python面向对象一
A.python面向对象 1.面向对象基础:面向对象三个特性:封装,继承,多态C# java 只能用面向对象编程Ruby,python 函数+面向对象 函数式编程:def 函数def f1(a): r ...
- Python面向对象之:三大特性:继承,封装,多态以及类的约束
前言: python面向对象的三大特性:继承,封装,多态. 1. 封装: 把很多数据封装到⼀个对象中. 把固定功能的代码封装到⼀个代码块, 函数, 对象, 打包成模块. 这都属于封装的思想. 具体的情 ...
- Python面向对象的高级编程
数据封装.继承和多态只是面向对象程序设计中最基础的3个概念.在Python中,面向对象还有很多高级特性,允许我们写出非常强大的功能. 我们会讨论多重继承.定制类.元类等概念. 使用__slots__ ...
- python 面向对象初级篇
Python 面向对象(初级篇) 概述 面向过程:根据业务逻辑从上到下写垒代码 函数式:将某功能代码封装到函数中,日后便无需重复编写,仅调用函数即可 面向对象:对函数进行分类和封装,让开发" ...
- Python 面向对象 基础
编程范式概述:面向过程 和 面向对象 以及函数式编程 面向过程:(Procedure Oriented)是一种以事件为中心的编程思想. 就是分析出解决问题所需要的步骤,然后用函数把这些步骤一步一步实现 ...
随机推荐
- Android开发-资源导入
安卓开发首先要导入开发资源,这些资源包括图片,图标等,方便开发过程中的使用 我是跟着b站博主做的记账本app所以导入的资源也来自于网络 将资源导入到res文件夹下这里面包括颜色资源,布局资源,图片资源 ...
- Java多线程专题6: Queue和List
合集目录 Java多线程专题6: Queue和List CopyOnWriteArrayList 如何通过写时拷贝实现并发安全的 List? CopyOnWrite(COW), 是计算机程序设计领域中 ...
- java中的线程是如何工作的。
来自对此文章的编辑. https://mp.weixin.qq.com/s?biz=MzA5NDg3MjAwMQ==&mid=2457103451&idx=1&sn=ba302 ...
- ApacheCN 机器学习译文集 20211111 更新
台湾大学林轩田机器学习笔记 机器学习基石 1 -- The Learning Problem 2 -- Learning to Answer Yes/No 3 -- Types of Learning ...
- WinForms 获取文件夹的基本信息
1 using System; 2 using System.Collections.Generic; 3 using System.ComponentModel; 4 using System.Da ...
- MySQL的注释方法
MySQL的三种注释方式 #1.单行注释 -- 2.单行注释(注意中间要带有一个空格才能生效) /*3.多行注释*/
- VC 常用
转载请注明来源:https://www.cnblogs.com/hookjc/ ------------------------------------------------------------ ...
- Protocol其他用法
1.protocol 的使用注意 1)Protocol:就一个用途,用来声明一大堆的方法(不能声明成员变量),不能写实现. @protocol SportProtocol <NSObject&g ...
- 使用Reachability监测网络变化-陈鹏
在appdelegate里面添加观察者,并启动监测 // 使用通知中心监听kReachabilityChangedNotification通知 [[NSNotificationCenter defau ...
- 怎么实时同步java虚拟机与操作系统时区 及JVM启动后再更改操作系统时区或时间也能保持其同步? new date() 时差8个小时的解决方案
第一种(亲测可以) 在代码当中的Application启动类当中加入代码 @PostConstruct void started() { //时区设置:中国上海 //time.zone: " ...