class类初始化之后调用赋值问题记录
class PWSTRDELL:
def __init__(self, pw_str):#该方法在类实例化时会自动调用
self.pw = pw_str
self.strength_level = 0
#通过初始化函数从外部传入
def pw_str_process(self):
#这里不用在传入password,直接用self.pw就可以了
if len(self.pw)>=8:
self.strength_level +=1
else:
print("密码至少8位") if self.pw_hasnumer():#虽然需要处理self.pw,但不必须要明显传入。因为def函数定义的时候参数是self
self.strength_level +=1
else:
print("密码至少含1位数字") if self.pw_hasalpha():
self.strength_level+=1
else:
print("密码至少含1位字母")
def pw_hasnumer(self):
has_number = False
for i in self.pw:
if i.isnumeric():
has_number = True
break
return has_number
def pw_hasalpha(self):
has_alpha = False
for i in self.pw:
if i.isalpha():
has_alpha = True
break
return has_alpha class FILETOOL:
def __init__(self, path, line):
self.filepath = path
self.line = line#"密码:{},强度:{},密码强度级别:{}\n".format(pw_str, pw_strong,pw_strong_word(pw_strong)) def write_file(self):
f = open(self.filepath, "a")
f.write(self.line)
f.close()
def read_file(self):
f = open(self.filepath,"r")
lines= f.readlines()
f.close()
return lines
def main():
x = 5
path ="pwd_03.txt"
line=""
file_process = FILETOOL(path, line) while x > 0:
pw_str = input("请输入密码-需包含至少8位,由字母数字组成的密码")
#实例化class类的对象,传入参数,初始化类
pw_tool = PWSTRDELL(pw_str)
#类的初始化函数要求一个输入,所以这里需要输入一个函数
#类初始化之后开始调用类的处理
pw_tool.pw_str_process() print("输入密码{}的密码强度为{},".format(pw_str,pw_tool.strength_level)) line = "输入密码{}的密码强度为{},".format(pw_str,pw_tool.strength_level)
file_process.write_file() if pw_tool.strength_level>=3:
print("恭喜,密码设置成功")
break
else:
print("密码不符合要求,请重新设置\n")
x -= 1 else:
print("尝试次数太多,请稍后再试") print(file_process.read_file())
if __name__=="__main__":
main()
上面这段代码里,write的内容是空的,因为初始化的时候line写了是空字符串,虽然下面line重新赋值了,但是并没有改变类里line的值
上述line那行,需要改成
file_process.line = "输入密码{}的密码强度为{}\n".format(pw_str,pw_tool.strength_level) 这样才会写入值 或者用下面的方法:
class定义时去掉line,只在方法内引入line
class PWSTRDELL:
def __init__(self, pw_str):#该方法在类实例化时会自动调用
self.pw = pw_str
self.strength_level = 0
#通过初始化函数从外部传入
def pw_str_process(self):
#这里不用在传入password,直接用self.pw就可以了
if len(self.pw)>=8:
self.strength_level +=1
else:
print("密码至少8位") if self.pw_hasnumer():#虽然需要处理self.pw,但不必须要明显传入。因为def函数定义的时候参数是self
self.strength_level +=1
else:
print("密码至少含1位数字") if self.pw_hasalpha():
self.strength_level+=1
else:
print("密码至少含1位字母")
def pw_hasnumer(self):
has_number = False
for i in self.pw:
if i.isnumeric():
has_number = True
break
return has_number
def pw_hasalpha(self):
has_alpha = False
for i in self.pw:
if i.isalpha():
has_alpha = True
break
return has_alpha class FILETOOL:
def __init__(self, path):
self.filepath = path
#self.line = line#"密码:{},强度:{},密码强度级别:{}\n".format(pw_str, pw_strong,pw_strong_word(pw_strong)) def write_file(self, line):#写入的line不是类的属性,而是这个方法需要写入line
f = open(self.filepath, "a")
f.write(line)
f.close()
def read_file(self):
f = open(self.filepath,"r")
lines= f.readlines()
f.close()
return lines
def main():
x = 5
path ="pwd_03.txt"
line=""
file_process = FILETOOL(path) while x > 0:
pw_str = input("请输入密码-需包含至少8位,由字母数字组成的密码")
#实例化class类的对象,传入参数,初始化类
pw_tool = PWSTRDELL(pw_str)
#类的初始化函数要求一个输入,所以这里需要输入一个函数
#类初始化之后开始调用类的处理
pw_tool.pw_str_process() print("输入密码{}的密码强度为{}\n".format(pw_str,pw_tool.strength_level)) line = "输入密码{}的密码强度为{}\n".format(pw_str,pw_tool.strength_level)
#file_process.line = "输入密码{}的密码强度为{}\n".format(pw_str,pw_tool.strength_level)
file_process.write_file(line) if pw_tool.strength_level>=3:
print("恭喜,密码设置成功")
break
else:
print("密码不符合要求,请重新设置\n")
x -= 1 else:
print("尝试次数太多,请稍后再试") print(file_process.read_file())
if __name__=="__main__":
main()
class类初始化之后调用赋值问题记录的更多相关文章
- 经测试稳定可用的蓝牙链接通信Demo,记录过程中遇到的问题的思考和解决办法,并整理后给出一个Utils类可以简单调用来实现蓝牙功能
说明:这是本人在蓝牙开发过程中遇到过的问题记录和分析,以及解决办法. 在研究过程中,许多的前人给出的解决方案和思路指导对我相当有帮助,但并非都是可采取的解决方法, 经过本人对这些方法的测试和使用过后, ...
- Java类初始化
Java类初始化 成员变量的初始化和构造器 如果类的成员变量在定义时没有进行显示的初始化赋值,Java会给每个成员变量一个默认值 对于 char.short.byte.int.long.float. ...
- C++与C#对比学习:类初始化
类和柏拉图的理念世界 我们知道面向对象编程中到处是一个个的类,但类只是个概念性的东西,不是个实体,不占内存,你没实例化之前也不能用它.只有把类实例化成一个对象后,它才是一个真正存在的实体.占有内存,能 ...
- 【c++】必须在类初始化列表中初始化的几种情况
转自:http://www.cnblogs.com/kaituorensheng/p/3477630.html 1. 类成员为const类型 2. 类成员为引用类型 #include <iost ...
- [读书笔记] java类初始化
以下内容来自周志明的<深入理解java虚拟机>: 类初始化阶段是类加载过程的最后一步,前面的类加载过程中,除了在加载阶段用户应用程序可以通过自定义类加载器参与之外,其余动作完全由虚拟机主导 ...
- C++:基类与派生类对象之间的赋值兼容关系
4.5 基类与派生类对象之间的赋值兼容关系 在一定条件下,不同类型的数据之间可以进行类型转换,例如可以将整型数据赋给双精度型变量. 在赋值之前,先把整型数据转换为双精度型数据,然后再把它双精度型变量. ...
- C++构造函数初始化列表与赋值
C++中类的初始化操作一般有四个部分组成: 1.构造函数初始化列表 2.构造函数体内赋值 3.类外部初始化 4.类声明时直接赋值 对于内部数据类型(char,int,float...),构造函数初始化 ...
- 从jvm角度看懂类初始化、方法重写、重载。
类初始化 在讲类的初始化之前,我们先来大概了解一下类的声明周期.如下图 类的声明周期可以分为7个阶段,但今天我们只讲初始化阶段.我们我觉得出来使用和卸载阶段外,初始化阶段是最贴近我们平时学的,也是笔试 ...
- java类加载及类初始化
1.前言 java是跨平台语言,主要是因为它的java虚拟机的存在,java有事编译语言,所以需要将编写的java文件编译成jvm可运用的class字节码文件.在java中一切皆对象.对于Java虚拟 ...
随机推荐
- log4net 写入 mongodb+Mongodb记录日志
项目里面需要记录大量的日志,为了方便分析,也是为了方便开发人员远程查询日志,可以把日志写入MongoDB. 1.先上Log4net配置 <?xml version="1.0" ...
- tree状数据叶子节点与根节点等的递归转换
做项目时经常遇到树状层级数据.从各个层级数据的转换查询等.场景如行业类别的多层级,行政区层级,检查项类别层级等等. 数据结构如 Id Name ParentId #region area树状节点的转 ...
- 极致21点开发DAY4
完成的内容:1.修改上一篇博文中的Bug 2.完成任务窗口逻辑 using System; using System.Collections.Generic; using UnityEngine; ...
- Delphi调用API函数获取Windows目录信息、获取System目录信息、获取Temp临时文件目录信息
var Str1, Str2: Array[..Max_Path]of Char;//开辟缓冲区 Str3: Array[..]of Char; begin GetWindowsDirectory(@ ...
- angular和vue的差别
一angular是mvvm框架, 而vue是一个渐进式的框架, 相当于view层, 都有双向数据绑定, 但是angular中的双向数据绑定是基于脏检查机制, vue的双向数据绑定是基于ES5的gett ...
- 用 webpack 创建 vue 项目
1.安装支持webpack 包 npm i -D webpack webpack-cli aspnet-webpack webpack-dev-middleware webpack-hot-mi ...
- github收藏夹
技术面试必备基础知识 https://github.com/CyC2018/CS-Notes 程序员简历模板列表 https://github.com/geekcompany/ResumeSample ...
- BZOJ 4195: [Noi2015]程序自动分析 并查集+离散化
LUOGU 1955BZOJ 4195 题目描述 在实现程序自动分析的过程中,常常需要判定一些约束条件是否能被同时满足. 考虑一个约束满足问题的简化版本:假设x1,x2,x3...代表程序中出现的变量 ...
- [Python数据挖掘]第6章、电力窃漏电用户自动识别
一.背景与挖掘目标 相关背景自查 二.分析方法与过程 1.EDA(探索性数据分析) 1.分布分析 2.周期性分析 2.数据预处理 1.数据清洗 过滤非居民用电数据,过滤节假日用电数据(节假日用电量明显 ...
- Vue学习——使用vue-cli搭建一个简单的本地vue项目
前提 安装好node.js.npm.vue-cli.为什么要先安装这些,建议查看https://www.cnblogs.com/jixue/p/10673875.html,这个对于vue-cli理解很 ...