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虚拟 ...
随机推荐
- windows 中的类似于sudo的命令(在cmd中以另一个用户的身份运行命令)
linux中我们习惯用sudo命令来临时用另一个用户的身份执行命令. windows中,通常我们需要用管理员权限执行命令的时候通常是 右键->run as administrator. 用着键盘 ...
- Git命令(Git版本:Linux 2.14.3)
常用 git status 跟踪状态git commit -m "xxx" yyy.cppgit pull git pushgit mergetool --tool=meld 合并 ...
- 我所知道的JavaScript中判断数据类型
相信一提到怎么判断js的数据类型,大家都会想到的是typeof.instanceof,那么为什么有了typeof的存在还要有instanceof? typeof? 根据MDN:typeof操作符返回一 ...
- vue配置手机通过IP访问电脑开发环境
vue配置手机通过IP访问电脑开发环境config/index.js// Various Dev Server settings host: '0.0.0.0', // can be overwrit ...
- [ABP] ASP.NET Zero 5.6.0 之 ASP.NET Zero Power Tools 上手日志
之前破解了这个工具后,却没有使用它. 现在使用这个小工具,帮我完成创建Entity类,Dto类,AppService类,View视图等DDD相关工作以及Entity Framework Migrati ...
- 堆排序 P1090 合并果子
P1090 合并果子 本题要用到堆 一个小根堆 每次取出两堆,合并成一堆,为了让多多花费体力最少,我们要尽量少的重复大堆的合并,因此每次合并完以后,要把新的一坨放到堆里排一排,维护一个堆 有必要强调一 ...
- 在Javascript中数组对象(json)里元素相同的操作
1.数组对象元素相同,分组显示 let arry = [ { expensedate: '2018/09/29', amount: 1, type: '交通费' }, { expensedate: ...
- 用Flow编写更好的js代码
关于本文: 原文地址 翻译地址 译者:野草 本文发表于前端早读课[第897期] 你是否经常在debug那些简单可避免的bug?可能你给函数传参的时候搞错了参数的顺序,或者本来应该传个Number类型的 ...
- toggle,hasClass
toggle 但当toggle(),不带参数时,与show()和hide()的作用一样,切换元素的可见状态,如果元素是可见的,则切换为隐藏状态;如果元素是隐藏的则切换为可见状态,此时括号内可添加()毫 ...
- Vue 旅游网首页开发3 - Ajax获取首页数据
之前的首页数据都是写死在页面上的,现在修改项目,使得数据通过ajax动态获取. 死胎了 ... 不想写了····