python修炼第七天
第七天面向对象进阶,面向对象编程理解还是有些难度的,但是我觉得如果弄明白了,要比函数编程过程编程省事多了。继续努力!
1.面向对象补充: 封装
广义上的封装:把变量和函数都放在类中
狭义上的封装:把一些变量或者方法隐藏起来,不对外公开。 静态属性分两种:
公有的:
私有的: __名字 就是在名字前面加上两个下划线。这个就是公有的了
比如:
class Person:
name = "jack" #这个就是公有静态属性
__country = "中国" #这个是私有静态属性
如果是一个私有的属性,那么只能在类的内部使用。不能再类的外部使用
如果非要在类的外部调用一个私有的属性,那么name必须是在私有去的名字前面加_类名__私有名字
但是 不能使用上面这种方式去调用私有的变量。 私有变量:
在类的内部,如果使用__变量的形式会发生变形,python会自动的为你加上_类名
在类的外部,不能定义一个私有变量。
class Person:
__country = "中国"
def __init__(self,name,pwd):
self.name = name
self.__passwd = pwd
def login(self):
if self.name == "alex" and self.__pwd = "alex3714":
print("登录成功!")
私有方法:
class Person:
def __init__(self,name.pwd):
self.name = name
self.__pwd = pwd
def __eat(self):
print("eating")
alex = Person()
alex.__eat # 这种情况就会报错。无法调用私有方法。
应用场景,比如加密认证。
比如要做一个密码加密算法
def.__密码转换器(self,inp):
print("eating")
def.__密码(self):
inp = input("pwd")
self.__密码转换器(inp)
面试题:
class Foo:
def __into__(self):
self.func()
sef __func(self):
print("in Foo")
class Son(Foo):
def __func(self):
print("in son") s = Son()
这个会输出 in Foo
2.类中的装饰器方法
三个装饰器函数:
classmethod
staticmethod
property 1 property 2 classmethod
如果某一个类中的方法 并没有用到这个类的实例中的具体属性
只用到了类中的静态变量 就是用类方法 3 staticmethod
如果一个方法既不会用到对象中的属性,也不会用到类中的属性
就应该被定义为一个静态方法
比如
class Student:
@staticmethod
def login():
name = input("name:")
pwd = input("pwd:")
if name == "" and pwd == ""
print("实例化")
Student.login()
3.面向对象的进阶
反射 重点! ******
什么叫反射。
通过字符串数据类型的 变量名 来访问变量的值 1. 类名 反射 静态属性
2. 对象名 反射 对象属性 和方法
3. 模块 反射 模块中的名字
4. 反射 自己所在文件中的名字 x.y 这样的形式 都可以用反射
class Person:
def eat(self):print("eatubg")
def play(self):print("play")
alex = Person()
while True:
inp = input("insert")
if hasattr(alex,inp):
getattr(alex,inp)()
使用getattr获取一个名字,如果在这个对象的命名空间中没有这个名字,会报错
getattr的反射好伴侣 hasattr
如果使用getattr获取一个方法,那么只能拿到这个方法的内存地址,加上括号就可以执行
如果使用getattr获取一个属性。那么直接使用反射就可以获取到值 反射自己模块中的名字:
getattr(sys.modules["__main__"],"value")
setattr 是给对象赋值 如果有就覆盖了
setattr(obj,"name","jack")
delattr 删除属性 __new__ 创建一个对象。这个就是构造方法。 object.__new__(cls) 首先创建对象!
__init__ 初始化方法
先执行new方法,object.new()
再执行 init 方法 设计模式 -- JAVA设计语言来的。
单例模式: 某一个类 只有一个实例
__new__ 相当于生小孩,__init__就相当于给小孩穿衣服
单列模式就是只有一个小孩,但是衣服可以谁都要。谁都可以给这个孩子换各种衣服。最后穿的衣服才是他的衣服
class Person:
__insta = None
def __new__(cls,*args,**kwargs)
if not __insta:
obj = object(cls)
__insta = obj
return obj
def __init__(self):
print(obj) __str__ 可以打印对象的时候不返回内存地址,返回字符串。 注意只能返回字符串。 模块:
模块导入,就是执行了这个文件而已
mymodule.py文件
money = 100
def func1():
print("func1")
class manger:
def eat(self):
print("eating")
在其他的文件中可以引入
import mymodule
getattr(mymodule,"moeny")
getattr(mymodule,"func1")()
Manger = getattr(mymodule,"Manger")
a = Manger()
a.eat()
4 常用模块补齐:
1 序列化模块
什么叫序列化
{"1101":{"name":"jack","age":33,"class":"1101"}}
数据类型 -------- 字符串的过程
为什么要用序列化呢?
数据从内存到文件便捷
数据在网络上传输 字节 -- 字符串 -- 字典
python中的序列化模块都有哪些?
json 通用 支持的数据类型少。list tuple dict 容器类型
pickle 在Python中通用的。几乎支持所有的Python中的数据类型
shelve Python中使用的边界的序列化工具 py2 与 py3 转换可能出现问题。所以用的少 序列化的方法有四个:
基于内存的:
dumps 数据类型转字符串的过程 --- 序列化
loads 字符串转会其他数据类型 --- 反序列化
基于文件的:
dump 把数据类型转换为字符串存到文件 --- 序列化
load 从文件中把字符串转回数据类型 --- 反序列化
如果要dump多条数据:
with open("a.txt","w") as f:
str_dic = json.dumps(dic)
f.write(str_dic+"\n")
f.write(str_dic+"\n")
读多条数据:
with open("a.txt") as f:
for line in f
print(json.loads(line.strip())) 存储对象的时候,读可以使用:
with open("a.txt","rb") as f:
while True:
try:
obj = pickle.load(f)
print(obj)
except Runerror
break 2 hashlib 必须要会
比如存储用户密码
存储密码的时候不要用明文的, 需要对用户输入的密码进行一种计算,计算后会得到一个新的固定的字符串
得到一串16进制的字符串。
这就需要使用hashlib模块
hashlib功能:
将一个字符串进行摘要运算,拿到一个固定的值
包含额多种算法
能够让一个字符串 唯一的对应一个固定的值
hashlib使用方法:
使用场景1:密码加密验,校验。
hashlib.md5() #md5算法。
md5obj = hashlib.md5("tesla".encode("utf-8")) #实例化一个md5摘要。 这个可以加点盐
# 还有动态加盐。用账号名当作盐加。但是账号就没有办法改了。
md5obj.update("alex3714".encode("utf-8")) # 使用md5算法的对象来操作字符串
ret = md5obj.hexdigest() # 获取算法的结果 就是 hex + digest 消化 +16进制
hashlib.sha1() #sha算法
sha1obj = hashlib.sha1()
sha1obj.update("abcdefg".encode("utf-8"))
ret = sha1obj.hexdigest()
使用场景2:校验文件的一致性。 3 configparse
config.options("bitbucket.org") 同for循环 找到bitbucket,ort下所有的键
config.items()
config.get()
config.remove_setion
config.remove_option
config.set("topsecret.server.com","k1","111111")
config.set("yuan","k2","222222") 4 logging 必须要会
日志模块:程序出错 --- 日志 对内看的。
对外看的 用户行为等。
import logging
#简单配置,但是对中文不友好。
logging.debug("debug message") #非常细节的日志 ---- 排查错误的时候使用
logging.info("info message") # 正常的日志信息,操作记录等。
logging.warning("warning message") # 系统的小问题,但可以正常运转
logging.error("error message") # 已经不能正常处理。但是可以通过一些try处理来越过错误。
logging.critical("critical message") # 严重错误。已经不能正常使用了l。
使用:
logging.bashConfig(level=logging.DEBUG
format='%(asctime)s %(filename)s[line:%(lineno)d] %(levelname)s %(message)s ') #logger对象的方式配置 ---- 一般使用这种进行配置 对中文支持比较好。
#有点类似吸星大法
loggers = logging.getLogger()
# 往文件中输入
fh = logging.FileHandler("log.log",encoding="utf-8") #创建了一个能操作文件的对象fh,注意指定中文编码。
loggers.addHandler(fh)
loggers.debug("warning message")
# 往屏幕上输入
sh = logging.StreamHandler()
loggers.addHandler(sh)
loggers.warning("warning message")
# 格式不好看 还可以自定义格式:
fh = logging.FileHandler("log.log")
formatter = loggers.Formatter('%(asctime)s - %(name)s - %(levelname)s - %(message)s')
fh.setFormatter(formatter)
loggers.addHandler(fh)
# # 如果要输出那个级别 可以调整:
fh.setLevel(loggers.DEBUG)
同时注意如果要输出级别往下的话 还需要修改loggers的级别
loggers.setLevel(logging.DEBUG)
python修炼第七天的更多相关文章
- python修炼第一天
Python修炼第一天 新的开始:不会Python的运维,人生是不完整的. 为了我的人生能够完整,所以我来了!今后跟着太白金星师傅学习功夫,记录一下心得,以便日后苦练. 一 Python的历史: Py ...
- python学习第七讲,python中的数据类型,列表,元祖,字典,之元祖使用与介绍
目录 python学习第七讲,python中的数据类型,列表,元祖,字典,之元祖使用与介绍 一丶元祖 1.元祖简介 2.元祖变量的定义 3.元祖变量的常用操作. 4.元祖的遍历 5.元祖的应用场景 p ...
- Python学习第七课
Python学习第七课 'Alex' "Alex"print('hello'*5) #重复输出字符串 print('hellowold'[2:]) #类似于切片操作:会取出 llo ...
- Python爬虫实战七之计算大学本学期绩点
大家好,本次为大家带来的项目是计算大学本学期绩点.首先说明的是,博主来自山东大学,有属于个人的学生成绩管理系统,需要学号密码才可以登录,不过可能广大读者没有这个学号密码,不能实际进行操作,所以最主要的 ...
- Python爬虫入门七之正则表达式
在前面我们已经搞定了怎样获取页面的内容,不过还差一步,这么多杂乱的代码夹杂文字我们怎样把它提取出来整理呢?下面就开始介绍一个十分强大的工具,正则表达式! 1.了解正则表达式 正则表达式是对字符串操作的 ...
- 转 Python爬虫入门七之正则表达式
静觅 » Python爬虫入门七之正则表达式 1.了解正则表达式 正则表达式是对字符串操作的一种逻辑公式,就是用事先定义好的一些特定字符.及这些特定字符的组合,组成一个“规则字符串”,这个“规则字符串 ...
- python接口自动化测试七:获取登录的Cookies
python接口自动化测试七:获取登录的Cookies,并关联到下一个请求 获取登录的cookies:loginCookies = r.cookies 把获取到的cookies传入请求:cooki ...
- 小白的 Python 修炼手册:入门篇
Life is short, you need Python.(人生苦短,我用 Python.) --Bruce Eckel 前言 听说现在是全民 Python 的时代,虽然不知道事实如何,但学会 P ...
- 2003031121——浦娟——Python数据分析第七周作业——MySQL的安装及使用
项目 要求 课程班级博客链接 20级数据班(本) 作业要求链接 Python第七周作业 博客名称 2003031121--浦娟--Python数据分析第七周作业--MySQL的安装及使用 要求 每道题 ...
随机推荐
- JZ2440学习笔记之中断
.extern main .text .global _start _start: @********************************************************* ...
- flutter sqflite
https://www.jianshu.com/p/88998af66e4b https://www.jianshu.com/p/7ac3ce2bc0c6
- js实现简易版validate
需求分析 项目中需要根据选择不同的类型,显示不同的表单,采用的方法是css隐藏显示不需要的表单,但是这个表单字段都是必填的,尝试把不同的表单放在不同的form里,提交时根据不同的类型调用miniui自 ...
- MySQL:Download Connector/Python
MySQL Connector / Python是用于Python平台和开发的标准化数据库驱动程序. 此外,MySQL Connector / Python 8.0支持使用MySQL Server 8 ...
- Pycharm 的设置--参数设置(运行.py文件带参数,例如argument)
程序运行时,如果需要输入参数,如下图中程序代码: 在生成exe后,程序在控制台下运行时格式为: 这种情况在调试程序时,如果只是在Pycharm环境中简单执行“Run”菜单下的“Run”命令,会出现以下 ...
- PTA编程总结2—币值转换
7-1 币值转换 (20 分) 输入一个整数(位数不超过9位)代表一个人民币值(单位为元),请转换成财务要求的大写中文格式.如23108元,转换后变成"贰万叁仟壹百零捌"元.为了简 ...
- Polly 熔断策略
熔断策略主要以 CircuitBreaker 来完成. 工作原理 熔断器可以被看作为一个主要含有三个状态的状态机 如果以电路开关来看: 开关闭合对应 CLOSED 状态, 开关打开对应 OPEN 状态 ...
- Visual Studio 2019 double clicking project(custom behavior)
Issue
- HDU 3085 Nightmare Ⅱ(噩梦 Ⅱ)
HDU 3085 Nightmare Ⅱ(噩梦 Ⅱ) Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/65536 K (Ja ...
- vs2013编译obs源码
obs源码下载 一种是在GitHub上下载最新的代码 git clone --recursive https://github.com/jp9000/obs-studio.git --recursiv ...