class PWSTRDELL:def __init__(self, pw_str):#该方法在类实例化时会自动调用self.pw = pw_strself.strength_level = 0#通过初始化函数从外部传入def pw_str_process(self):#这里不用在传入password,直接用self.pw就可以了if len(self.pw)>=8:self.strength_level +=1else:print("密码至少8位")if self.pw_hasnumer():#虽然需要处理self.pw,但不必须要明显传入。因为def函数定义的时候参数是selfself.strength_level +=1else:print("密码至少含1位数字")if self.pw_hasalpha():self.strength_level+=1else:print("密码至少含1位字母")def pw_hasnumer(self):has_number = Falsefor i in self.pw:if i.isnumeric():has_number = Truebreakreturn has_numberdef pw_hasalpha(self):has_alpha = Falsefor i in self.pw:if i.isalpha():has_alpha = Truebreakreturn has_alphaclass FILETOOL:def __init__(self, path, line):self.filepath = pathself.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 = 5path ="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("恭喜,密码设置成功")breakelse:print("密码不符合要求,请重新设置\n")x -= 1else: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_strself.strength_level = 0#通过初始化函数从外部传入def pw_str_process(self):#这里不用在传入password,直接用self.pw就可以了if len(self.pw)>=8:self.strength_level +=1else:print("密码至少8位")if self.pw_hasnumer():#虽然需要处理self.pw,但不必须要明显传入。因为def函数定义的时候参数是selfself.strength_level +=1else:print("密码至少含1位数字")if self.pw_hasalpha():self.strength_level+=1else:print("密码至少含1位字母")def pw_hasnumer(self):has_number = Falsefor i in self.pw:if i.isnumeric():has_number = Truebreakreturn has_numberdef pw_hasalpha(self):has_alpha = Falsefor i in self.pw:if i.isalpha():has_alpha = Truebreakreturn has_alphaclass 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不是类的属性,而是这个方法需要写入linef = 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 = 5path ="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("恭喜,密码设置成功")breakelse:print("密码不符合要求,请重新设置\n")x -= 1else:print("尝试次数太多,请稍后再试")print(file_process.read_file())
if __name__=="__main__":main()

转载于:https://www.cnblogs.com/qiu-1010/p/10672183.html

class类初始化之后调用赋值问题记录相关推荐

  1. Java类初始化顺序(变量赋值与静态代码块的执行时间)

    前言:最近写代码的时候经常见到见到static代码块,不由对static的执行时间产生了兴趣,进而对类初始化顺序产生了兴趣. 类从编译到执行的过程: 在使用ClassLoader将字节码转换为JVM中 ...

  2. java初始化实例化_Java 类初始化和实例化以及多态理解

    前言 本篇主要讲解了类的初始化.实例化.静态代码块.构造器.getClass().super.this 等相关的知识点,做一个总结. demo 老规矩,看代码: Father.java public ...

  3. 创建一个Dog类,初始化构造方法具有name和age属性。Dog类具有坐和打滚的方法。请编写相应的类并创建对象调用该类。

    创建一个Dog类,初始化构造方法具有name和age属性.Dog类具有坐和打滚的方法.请编写相应的类并创建对象调用该类. class Dog(object):def __init__(self,nam ...

  4. 【Java4】实例初始化,类初始化,/接口,多态,final/static,权限修饰符/native

    文章目录 1.实例初始化过程:有几个构造器,就会有几个实例初始化方法 2.实例初始化和类初始化结合:先类(静态)后实 3.接口:只有abstract可省 3.1 鸟类案例:Flyable相当于父类的一 ...

  5. Java必突-JVM知识专题(一): Java代码是如何跑起来的+类加载到使用的过程+类从加载到使用核心阶段(类初始化)+类加载的层级结构+什么是JVM的内存区域划分?Java虚拟机栈、Java堆内存

    前言: 该章节知识点梳理:本文主要是入门和了解jvm,不做深入 1.Java代码是如何运行起来的? 2.类加载到使用的过程? 3.验证准备和初始化的过程? 4.类从加载到使用核心阶段:初始化.类加载器 ...

  6. 从jvm角度看懂类初始化、方法重写、重载。

    类初始化 在讲类的初始化之前,我们先来大概了解一下类的声明周期.如下图 类的声明周期可以分为7个阶段,但今天我们只讲初始化阶段.我们我觉得出来使用和卸载阶段外,初始化阶段是最贴近我们平时学的,也是笔试 ...

  7. 假笨说-类初始化死锁导致线程被打爆!打爆!爆!

    概述 之前写过关于类加载死锁的文章,消失的死锁,说的是类加载过程中发生的死锁,我们从线程dump里完全看不出死锁的迹象,但是确实发生了死锁,没了解的建议看看我前面的那篇文章 本文要说的是另外一个问题, ...

  8. 一步搞清楚多态与类初始化的底层原理

    首先我们先看一个段非常有代表性的代码,里面一口气牵扯到了多态和类初始化顺序知识. public class Test {public static void main(String[] args) { ...

  9. 单例设计模式-静态内部类-基于类初始化的延迟加载解决方案及原理解析

    刚刚线程1看不到线程0的重排序,我们创建一个类,这个方案是使用静态内部类来解决,一会我们也会分析一下原理,我们创建一个静态内部类,静态内部类的代理模式,JVM在类的初始化阶段,也就是class被加载后 ...

最新文章

  1. java maven项目使用sonar审核代码
  2. 使用Response.Redirect 两种方法打开一个新窗口
  3. 关于鼠标移动太快导致moseleave事件不触发的问题
  4. Windows登录类型知多少?
  5. python的web抓取_python实现从web抓取文档的方法
  6. iOS开发之APP内部切换语言
  7. [C++11]弱引用智能指针weak_ptr初始化和相关的操作函数
  8. 从像素坐标到相机坐标_多视图几何基础——深入理解相机内外参数
  9. pycharm+python3.7+pyqt配置_Python3+Pycharm+PyQt5环境搭建步骤图文详解
  10. 车险受益人变更需要什么资料?
  11. 关于Vue使用es6模板字符串没反应的问题
  12. st58服务器装系统,联想 Thinksystem ST58服务器介绍
  13. html2canvas解决图片空白,网络图片跨域
  14. mysql 双机热备 原理,MySQL双机热备份的配置及原理
  15. 传苹果或推出安卓版iTunes音乐商店
  16. 机器人总动员cp图_阿尔法蛋冠名《人偶总动员4》 牵手高天鹤萌翻全场
  17. MySQL中对敏感字段值进行加密存储
  18. C++界面开发框架Qt新手入门指南 - 如何创建Qt Quick UI项目
  19. pip install scrapy 报错:缺少Twisted 解决办法 :error: Microsoft Visual C++ 14.0 is required
  20. android viewPage 打造3d画廊

热门文章

  1. 【html】【19】高级篇--大事件时间轴
  2. WinForm窗体自适应分辨率
  3. POJ 1088----滑雪(DP)
  4. 第五届省赛(软件类)真题----Java大学B组答案及解析
  5. linux权限源码分析,Linux基础之文件权限详解
  6. Linux的开源免费办公软件,开源免费Office办公套件(LibreOffice)
  7. 快捷登录PHP,phpcms 微信快捷登陆
  8. Golang——延迟调用defer
  9. Java异常持久化,Log4j进行日志的数据库持久化,说SQL语法异常。
  10. MySQL后初次密码_mysql第一次安装成功后初始化密码操作步骤