day21

面向对象的初识

面向对象第一个优点: 对相似功能的函数,同一个业务下的函数进行归类,分类.

想要学习面向对象必须站在一个上帝的角度去分析考虑问题.

类: 具有相同属性和功能的一类事物.

对象:某个类的具体体现.

汽车: 汽车类, 楼下停着一个车牌号为9nb11的奥迪对象.

猫科类: 类. 陈硕家的养的那个大橘.对象.

鸡类: 一个类. 家里养的一只鸡.

男神:是一类. 太白对象.

面向对象的第二优点: 你要站在上帝的角度构建代码,类就是一个公共的模板,对象就是从模板实例化出来的.

得到对象就得到了一切.

# 面向过程编程vs函数
面向过程编程
# s1 = 'fdskajfdfsdfs'
# count = 0
# for i in s1:
# count += 1
# print(count) # l1 = [i for i in range(10)]
# count = 0
# for i in l1:
# count += 1
# print(count) 函数# 减少了重复代码,增强了可读性
# l1 = [i for i in range(10)]
# def my_len(argv):
# count = 0
# for i in argv:
# count += 1
# print(count)
# my_len(l1) # 函数式编程vs面向对象编程
函数式编程
def login():
pass def register():
pass def shopping_car():
pass def change_pwd():
pass def check_paid_goods():
pass def check_unpaid_goods():
pass 面向对象编程
class Auth: def login(self):
pass def register(self):
pass def change_pwd(self):
pass class Shopping: def shopping_car(self):
pass def check_paid_goods(self):
pass def check_unpaid_goods(self):
pass
'''
面向对象第一个优点: 对相似功能的函数,同一个业务下的函数进行归类,分类. 想要学习面向对象必须站在一个上帝的角度去分析考虑问题.
类: 具有相同属性和功能的一类事物.
对象:某个类的具体体现. 汽车: 汽车类, 楼下停着一个车牌号为9nb11的奥迪对象.
猫科类: 类. 陈硕家的养的那个大橘.对象.
鸡类: 一个类. 家里养的一只鸡.
男神:是一类. 太白对象. 面向对象的第二优点: 你要站在上帝的角度构建代码,类就是一个公共的模板,对象就是从模板实例化出来的.
得到对象就得到了一切.
'''

面向对象的结构

类的命名为驼峰式

class Human:
"""
类的具体结构
"""
# 第一部分:静态属性
mind = '有思想' # 类的属性 (静态属性, 静态字段)
language = '使用语言' # 第二部分: 动态方法
def work(self):
print('人类都会工作') def eat(self):
print('人类都需要吃饭')

从类名的角度研究类

类名操作类的属性

类名查看类中所有的内容
print(Human.__dict__)
类名操作类中的静态属性 万能的点.
增:
# Human.body = '有头和四肢'
删:
# del Human.mind
改:
# Human.mind = 'liye脑残'
查:
# print(Human.language)
# class Human:
# """
# 类的具体结构
# """
# # 第一部分:静态属性
# mind = '有思想' # 类的属性 (静态属性, 静态字段)
# language = '使用语言'
#
# # 第二部分: 动态方法
# def work(self):
# print('人类都会工作')
#
# def eat(self):
# print('人类都需要吃饭') # 类名操作类中的属性
# 1. 类名查看类中所有的内容
# print(Human.__dict__)
# 2. 类名操作类中的静态属性 万能的点.
增:
# Human.body = '有头和四肢'
删:
# del Human.mind
改:
# Human.mind = 'liye脑残'
查:
# print(Human.language)
# print(Human.__dict__)

类名调用类的方法

# 类名调用类中的方法(一般类中的(静态方法,类方法)方法不会通过类名调用)
Human.work(111)
总结

​ 一般类名就是操作类中的属性.

从对象的角度研究类

什么是对象

​ 对象是从类中出来的,只要是类名加上(),这就是一个实例化过程,这个就会实例化一个对象。

实例化对象发生了三件事
  • 开辟一个对象空间.
  • 自动执行______init______方法,并且将对象地址传给self.
  • 运行______init______方法内的代码,给对象空间封装属性.
对象操作对象属性
  • 对象查看对象的空间的所有属性
# obj = Human('李业',18)
# print(obj.__dict__)
  • 对象操作对象空间的属性
# obj = Human('李业',18)
# 增:
# obj.sex = 'laddy_boy'
# 删:
# del obj.a
# 改:
# obj.a = 1000
# 查:
# print(obj.n)
# print(obj.__dict__)
对象查看类中的属性

只能调用无法改变

# obj = Human('李业',18)
# # print(obj.mind)
# obj.mind = '无脑的'
# print(obj.mind)
# print(Human.mind)
对象调用类中的方法
# obj = Human('孙戴维', 23)
# # print(f'obj---> {obj}')
# obj.work()
# obj.eat()
# class Human:
# """
# 类的具体结构
# """
# # 第一部分:静态属性
# mind = '有思想' # 类的属性 (静态属性, 静态字段)
# language = '使用语言'
#
# def __init__(self):
# # print(f'self---->: {self}')
# # print(666)
# self.name = '李业'
# self.age = 18
#
# # 第二部分: 动态方法
# def work(self):
# print('人类都会工作')
#
# def eat(self):
# print('人类都需要吃饭')
#
# obj = Human() # 实例化过程
# 得到一个返回值,这个返回值就是 对象,实例.
# print(f'obj---> {obj}')
# 实例化一个对象发生了三件事:
'''
1. 开辟一个对象空间.
2. 自动执行__init__方法,并且将对象地址传给self.
3. 运行__init__方法内的代码,给对象空间封装属性. ''' class Human:
"""
类的具体结构
"""
# 第一部分:静态属性
mind = '有思想' # 类的属性 (静态属性, 静态字段)
language = '使用语言' def __init__(self, name, age):
# print(f'self---->: {self}')
# print(666)
self.n = name
self.a = age # 第二部分: 动态方法
def work(self):
# print(f'self---> {self}')
print(f'{self.n}都会工作') def eat(self):
print(f'{self.n}都需要吃饭') # obj = Human('李业',18) # 实例化过程
# print(obj.n)
# print(obj.a)
# print(obj.__dict__) # 一:对象操作对象空间的属性 # 1. 对象查看对象的空间的所有属性
# obj = Human('李业',18)
# print(obj.__dict__) # 2. 对象操作对象空间的属性
# obj = Human('李业',18)
# 增:
# obj.sex = 'laddy_boy'
# 删:
# del obj.a
# 改:
# obj.a = 1000
# 查:
# print(obj.n)
# print(obj.__dict__) # 二 对象查看类中的属性
# obj = Human('李业',18)
# # print(obj.mind)
# obj.mind = '无脑的'
# print(obj.mind)
# print(Human.mind) # 三 对象调用类中的方法
# obj = Human('孙戴维', 23)
# # print(f'obj---> {obj}')
# obj.work()
# obj.eat() # 一个类可以实例化多个对象
# obj1 = Human('李业',18)
# obj2 = Human('小可爱', 16)
# obj3 = Human('怼姐', 18) # 变量,函数名:
# age_of_oldboy = 73
# Ageofoldboy

self是什么?

self 本身来说就是类中的方法的第一个位置参数,他会自动接收对象内存地址

一个类可以实例化多个对象

# 一个类可以实例化多个对象
# obj1 = Human('李业',18)
# obj2 = Human('小可爱', 16)
# obj3 = Human('怼姐', 18)

logging模块

  • 系统日志:

    记录操作系统、服务器的硬件性能状态(cpu、网卡、内存运行),将你获取到的参数通过日志写入文件中,记录运维人员的命令

  • 网站日志

    用户的访问次数,用户的停留时间,访问量,各地区的访问量等等

  • 开发辅助日志

    debug、info模式、代替print

    try:

    ​ 错误

    except

    ​ 日志记录

  • 用户信息日志

    记录用户的转账,流水等用户对系统的操作

更改版
"""
logging配置
""" import os
import logging.config
# 定义三种日志输出格式 开始 standard_format = '[%(asctime)s][%(threadName)s:%(thread)d][task_id:%(name)s][%(filename)s:%(lineno)d]' \
'[%(levelname)s][%(message)s]' #其中name为getlogger指定的名字 simple_format = '在 %(asctime)s %(message)s' id_simple_format = '[%(levelname)s][%(asctime)s] %(message)s' # log配置字典
LOGGING_DIC = {
'version': 1,
'disable_existing_loggers': False,
'formatters': {
'standard': {
'format': standard_format
},
'simple': {
'format': simple_format
},
},
'filters': {},
'handlers': {
#打印到终端的日志
'stream': {
'level': 'DEBUG',
'class': 'logging.StreamHandler', # 打印到屏幕
'formatter': 'simple'
},
#打印到文件的日志,收集info及以上的日志
'file': {
'level': 'DEBUG',
'class': 'logging.handlers.RotatingFileHandler', # 保存到文件
'formatter': 'standard',
'filename': None, # 日志文件
'maxBytes': 1024*1024*1024, # 日志大小 5M
'backupCount': 5,
'encoding': 'utf-8', # 日志文件的编码,再也不用担心中文log乱码了
},
},
'loggers': {
#logging.getLogger(__name__)拿到的logger配置
'': {
'handlers': ['stream', 'file'], # 这里把上面定义的两个handler都加上,即log数据既写入文件又打印到屏幕
'level': 'DEBUG',
'propagate': True, # 向上(更高level的logger)传递
},
},
} def get_logger():
path = r'F:\s24\day21\liye.log'
LOGGING_DIC['handlers']['file']['filename'] = path
logging.config.dictConfig(LOGGING_DIC) # 导入上面定义的logging配置
logger = logging.getLogger(__name__) # 生成一个log实例
return logger def save():
logger = get_logger()
logger.info(f'{} 存入300元') # 记录该文件的运行状态 save()
完全版
"""
logging配置
""" import os
import logging.config # 定义三种日志输出格式 开始 standard_format = '[%(asctime)s][%(threadName)s:%(thread)d][task_id:%(name)s][%(filename)s:%(lineno)d]' \
'[%(levelname)s][%(message)s]' #其中name为getlogger指定的名字 simple_format = '[%(levelname)s][%(asctime)s][%(filename)s:%(lineno)d]%(message)s' id_simple_format = '[%(levelname)s][%(asctime)s] %(message)s' # 定义日志输出格式 结束 logfile_dir = os.path.dirname(os.path.abspath(__file__)) # log文件的目录 logfile_name = 'all2.log' # log文件名 # 如果不存在定义的日志目录就创建一个
if not os.path.isdir(logfile_dir):
os.mkdir(logfile_dir) # log文件的全路径
logfile_path = os.path.join(logfile_dir, logfile_name) # log配置字典
LOGGING_DIC = {
'version': 1,
'disable_existing_loggers': False,
'formatters': {
'standard': {
'format': standard_format
},
'simple': {
'format': simple_format
},
},
'filters': {},
'handlers': {
#打印到终端的日志
'console': {
'level': 'DEBUG',
'class': 'logging.StreamHandler', # 打印到屏幕
'formatter': 'simple'
},
#打印到文件的日志,收集info及以上的日志
'default': {
'level': 'DEBUG',
'class': 'logging.handlers.RotatingFileHandler', # 保存到文件
'formatter': 'standard',
'filename': logfile_path, # 日志文件
'maxBytes': 1024*1024*5, # 日志大小 5M
'backupCount': 5,
'encoding': 'utf-8', # 日志文件的编码,再也不用担心中文log乱码了
},
},
'loggers': {
#logging.getLogger(__name__)拿到的logger配置
'': {
'handlers': ['default', 'console'], # 这里把上面定义的两个handler都加上,即log数据既写入文件又打印到屏幕
'level': 'DEBUG',
'propagate': True, # 向上(更高level的logger)传递
},
},
} def load_my_logging_cfg():
logging.config.dictConfig(LOGGING_DIC) # 导入上面定义的logging配置
logger = logging.getLogger(__name__) # 生成一个log实例
logger.info('It works!') # 记录该文件的运行状态 if __name__ == '__main__':
load_my_logging_cfg() logger配置文件

day21——面向对象初识、结构、从类名研究类、从对象研究类、logging模块进阶版的更多相关文章

  1. python: 面向对象:类和对象调用类中的变量和方法

    一. 面向对象初识 我们在生活中做事都是面向过程的,前面实现一些基本逻辑功能代码也是用面向过程的语句实现的,后来学了函数,把这些功能又装到了函数里.但用面向过程的方法去写程序,只能实现一个功能,我们要 ...

  2. 0604-面向对象、类与对象、类、static、构造方法/析构方法

    一.面向对象 1.面向过程:一个人分步骤完成某个事情 2.面向对象:某件事情拆分为多个任务,由每个对象独立完成,最后调用整合为一个完整的项目 3.三要素:继承.封装.多态. 封装:私有化属性 提供公共 ...

  3. 【学习笔记】【oc】类和对象及类的三大基本特征

    1.类和对象 类是抽象化,对象是具体化. (1)定义类: 分为两个步骤,类的声明:定义类的成员变量和方法:@interface 用于声明定义类的接口部分,@end表面定义结束:. 成员变量的定义:{} ...

  4. python的类和对象(类的静态字段)

    转自:http://www.cnblogs.com/Eva-J/p/5044411.html 什么是静态字段 在开始之前,先上图,解释一下什么是类的静态字段(我有的时候会叫它类的静态变量,总之说的都是 ...

  5. c++中的类的对象与类的指针

    以上内容来自:http://wenku.baidu.com/link?url=haeRBhswlEcqddk48uW8YVMsdFNWsllimn_dzUYchb6G9NdT4pqgluCpnLQId ...

  6. C#类,对象,类成员简介

    本节内容 1.类(class)是现实世界事物的模型 2.类与对象的关系,什么时候叫“对象”什么时候叫“实例” 3.引用变量与实例的关系 4.类的三大成员: ①属性(Property): ②方法(Met ...

  7. C++类的对象和类的指针的区别

    #include <iostream> #include <string> using namespace std; class Student { public: stati ...

  8. python全栈开发day21面向对象初识总结

  9. php函数、类和对象以及类的封装、继承、类的静态方法、静态属性

    1.函数     php内置函数可以直接使用,如果没有安装php扩展即可     自定义函数 //函数function 函数名 function dump($var = null){ //支出默认参数 ...

随机推荐

  1. luogu_1156: 垃圾陷阱

    洛谷1156:垃圾陷阱 题目描述: 一头牛在一个井里,深度为\(D(1\leq D\leq100)\) 每过一段时间会往井里投掷一个物品,牛可以选择将其堆起来或者吃掉,吃掉可以增加生命值(生命值随时间 ...

  2. Presto Infrastructure at Lyft

    转载一篇关于 lyft presto 平台建设的实践 Overview Early in 2017 we started exploring Presto for OLAP use cases and ...

  3. 常用方法 DataTable转换为Entitys

    备注:摘自网上 有附地址 public static List<T> DataTableToEntities<T>(this DataTable dt) where T : c ...

  4. ESA2GJK1DH1K微信小程序篇: 测试微信小程序APUConfig给WI-Fi模块配网并绑定设备,并通过MQTT控制设备

    前言(源码使用介绍在最后) 一,微信小程序篇小程序下载(该源码为这节测试源代码) 二.有多少人一直在期盼着小程序可以实现SmartConfig或者Airkiss的功能? 来吧!我的这种方式包您满意. ...

  5. js 数组元素位置互换

    如下实现的是,先将数组反转,然后将第二个元素与倒数第三个元素位置互换 ,,,,,,,); arr.reverse(); two=arr.splice(,,); three=arr.splice(-,, ...

  6. docker swarm和compose 的使用(阿里)

    基本的docker使用参考:Docker 入门 到部署Web 程序- (阿里面试常用的docker命令和优点) 昨天去阿里面试 问我如果给你5台服务器 如何部署docker,我说一个个拷贝,面试官听了 ...

  7. JavaScript初探系列(九)——BOM

    一.什么是BOM? BOM:Browser Object Model 是浏览器对象模型,浏览器对象模型提供了独立与内容的.可以与浏览器窗口进行互动的对象结构,BOM由多个对象构成,其中代表浏览器窗口的 ...

  8. Java地址:

    GitHub:https://github.com/nanchen2251 个人博客:https://nanchen2251.github.io/ 简书地址:http://www.jianshu.co ...

  9. 使用evenlet包实现 concurrent.futures.executor包的鸭子类

    适配成同一个同样的公有方法. # -*- coding: utf-8 -*- # @Author : ydf # @Time : 2019/7/3 10:35 import time import w ...

  10. python基础】——python添加模块搜索路径和包的导入

    方法一:函数添加1 import sys2 查看sys.path3 添加sys.path.append("c:\\") 方法二:修改环境变量w用户可以修改系统环境变量PYTHONP ...