Board logo

标题: 自定义类 [打印本页]

作者: admin    时间: 2019-9-22 21:37     标题: 自定义类

类定义了集合中每个对象共有的属性和方法。 ###### 例子一: #coding=utf-8 class class1(): i = 123 j = "zhuohua" def func1(self): print("执行类的方法: Welcome to zhuohua.") if __name__ == '__main__': print('调用类的属性:',class1.i) print('调用类的属性:',class1.j) myclass = class1() myclass.func1() 脚本运行的结果: C:\Users\jacky\Desktop>python xx.py 调用类的属性: 123 调用类的属性: zhuohua 执行类的方法: Welcome to zhuohua. ###### 例子二: #coding=utf-8 class class1(): dict_1 = {'name': 'Mary', 'age': 18, 'address': 'China'} #字典 def __init__(self,name,score): self.name = name self.score = score def func1(self): print(self.score) print(type(self.score)) print(f"学生名称:{self.name},分数:{self.score}") print('Welcome to zhuohua.') if __name__ == '__main__': a = class1.dict_1 print(a) print(a['name']) print(a['age']) print(a['address']) print("-" * 10) myclass = class1("zhuohua",98) myclass.func1() print("-" * 10) myclass = class1("Python",68.5) myclass.func1() 脚本运行的结果: C:\Users\jacky\Desktop>python xx.py {'name': 'Mary', 'age': 18, 'address': 'China'} Mary 18 China ---------- 98 学生名称:zhuohua,分数:98 Welcome to zhuohua. ---------- 68.5 学生名称:Python,分数:68.5 Welcome to zhuohua. ###### 例子三: #coding=utf-8 class class1(): def __init__(self,name,score): self.name = name self.score = score def func1(self): return self.name def func2(self): return self.score def func3(self): return f"学生名称:{self.name},分数:{self.score}" def func4(self): return 'Welcome to zhuohua.' if __name__ == '__main__': myclass = class1("zhuohua",98) Result1 = myclass.func1() print(Result1) print(type(Result1)) Result2 = myclass.func2() print(Result2) print(type(Result2)) Result3 = myclass.func3() print(Result3) Result4 = myclass.func4() print(Result4) 脚本运行的结果: C:\Users\jacky\Desktop>python xx.py zhuohua 98 学生名称:zhuohua,分数:98 Welcome to zhuohua. ###### 例子四: #coding=utf-8 class class1(): def __init__(self,a,b,c): self.a = a self.b = b self.c = c def func1(self): self.num = (self.a + self.b) * self.c return self.num if __name__ == '__main__': myclass = class1(1,2,3) Result1 = myclass.func1() print(Result1) print(type(Result1)) print("计算结果为",Result1) 脚本运行的结果: C:\Users\jacky\Desktop>python xx.py 9 计算结果为 9 ###### 例子五: #coding=utf-8 class class1(): def __init__(self,a,b,c): self.a = a self.b = b self.c = c def func1(self): self.num = self.a + self.b * self.c return self.num,self.a,self.b,self.c if __name__ == '__main__': myclass = class1(c=3,b=2,a=1) Result1 = myclass.func1()[0] print("计算结果为",Result1) print("-" * 10) Result1 = myclass.func1()[1] print(Result1) Result1 = myclass.func1()[2] print(Result1) Result1 = myclass.func1()[3] print(Result1) 脚本运行的结果: C:\Users\jacky\Desktop>python xx.py 计算结果为 7 ---------- 1 2 3 ###### 例子六: #coding=utf-8 class class1(): def __init__(self,a,b,c): self.a = a self.b = b self.c = c def func1(self): self.num = self.a + self.b * self.c return self.num,self.a,self.b,self.c if __name__ == '__main__': a = int(input("请输入变量a的值:")) b = int(input("请输入变量b的值:")) c = int(input("请输入变量c的值:")) myclass = class1(a,b,c) print("-" * 10) Result1 = myclass.func1()[0] print("计算结果为",Result1) print("-" * 10) Result1 = myclass.func1()[1] print(Result1) Result1 = myclass.func1()[2] print(Result1) Result1 = myclass.func1()[3] print(Result1) 脚本运行的结果: C:\Users\jacky\Desktop>python xx.py 请输入变量a的值:1 请输入变量b的值:2 请输入变量c的值:3 ---------- 计算结果为 7 ---------- 1 2 3 ###### 例子七: #coding=utf-8 class class1(): def __init__(self): self.a = int(input("请输入变量a的值:")) self.b = int(input("请输入变量b的值:")) self.c = int(input("请输入变量c的值:")) def func1(self): self.num = self.a + self.b * self.c return self.num,self.a,self.b,self.c if __name__ == '__main__': myclass = class1() print("-" * 10) Result1 = myclass.func1()[0] print("计算结果为",Result1) print("-" * 10) Result1 = myclass.func1()[1] print(Result1) Result1 = myclass.func1()[2] print(Result1) Result1 = myclass.func1()[3] print(Result1) 脚本运行的结果: C:\Users\jacky\Desktop>python xx.py 请输入变量a的值:1 请输入变量b的值:2 请输入变量c的值:3 ---------- 计算结果为 7 ---------- 1 2 3 ###### 例子八: #coding=utf-8 class class1(): def func1(self): self.a = int(input("请输入变量a的值:")) self.b = int(input("请输入变量b的值:")) self.c = int(input("请输入变量c的值:")) def func2(self): self.num = self.a + self.b * self.c return self.num,self.a,self.b,self.c if __name__ == '__main__': myclass = class1() myclass.func1() Result1 = myclass.func2()[0] print("-" * 10) print("计算结果为",Result1) print("-" * 10) Result1 = myclass.func2()[1] print(Result1) Result1 = myclass.func2()[2] print(Result1) Result1 = myclass.func2()[3] print(Result1) 脚本运行的结果: C:\Users\jacky\Desktop>python xx.py 请输入变量a的值:1 请输入变量b的值:2 请输入变量c的值:3 ---------- 计算结果为 7 ---------- 1 2 3 ###### 例子九: #coding=utf-8 class class1(): def func1(self): self.a = int(input("请输入变量a的值:")) self.b = int(input("请输入变量b的值:")) self.c = int(input("请输入变量c的值:")) self.num = self.a + self.b * self.c return self.num def func2(self): print(f"返回结果为{self.num},小于或等于7") def func3(self): print(f"返回结果为{self.num},大于7") if __name__ == '__main__': myclass = class1() Result_1 = myclass.func1() if Result_1 <= 7: myclass.func2() elif Result_1 > 7: myclass.func3() 多次运行脚本的结果: C:\Users\jacky\Desktop>python xx.py 请输入变量a的值:-1 请输入变量b的值:-2 请输入变量c的值:-3 返回结果为5,小于或等于7 C:\Users\jacky\Desktop>python xx.py 请输入变量a的值:1 请输入变量b的值:2 请输入变量c的值:3 返回结果为7,小于或等于7 C:\Users\jacky\Desktop>python xx.py 请输入变量a的值:4 请输入变量b的值:5 请输入变量c的值:6 返回结果为34,大于7 ###### ###### 继承,可以理解成类之间类型和子类型的关系。 继承,最大的好处是子类获得父类全部非私有的属性、方法。 例子一:(继承) #coding=utf-8 class class1(): i = 1 #父类的属性 def func1(self): print("父类的方法") class class2(class1): j = 2 #子类的属性 def func2(self): print("子类的方法") if __name__ == '__main__': myclass = class2() a = myclass.i print("调用父类的属性",a) b = myclass.j print("调用子类的属性",b) myclass.func1() #执行父类的方法 myclass.func2() #执行子类的方法 脚本运行的结果: C:\Users\jacky\Desktop>python xx.py 调用父类的属性 1 调用子类的属性 2 父类的方法 子类的方法 ###### 例子二:(继承与多态) #coding=utf-8 class class1(): i = 1 def func1(self): print("父类的方法") class class2(class1): i = 2 def func1(self): print("子类的方法") if __name__ == '__main__': myclass = class2() a = myclass.i #在子类的属性名称与父类的属性名称重复时,子类的属性会覆盖父类的 print(a) myclass.func1() #在子类的方法名称与父类的方法名称重复时,子类的方法会覆盖父类的 脚本运行的结果: C:\Users\jacky\Desktop>python xx.py 2 子类的方法 ###### ###### 自定义异常类: 例子一:(函数使用自定义异常类) #coding=utf-8 class class8(Exception): #先自定义一个名为class8()的子类,其继承于父类Exception() def __init__(self,message): Exception.__init__(self) self.message = message def func1(): x = int(input("请输入一个整数:")) y = int(input("请再输入一个整数:")) a = x / y if a >= 10: #如果结果大于或等于10,就引发class8()的异常 func2(a) else: func3(a) def func2(a): #引发class8()的异常 try: raise class8("自定义异常类:结果大于或等于10") except class8 as e: print(e.message) def func3(a): print(f"结果为{a},小于10") if __name__ == '__main__': func1() 多次运行脚本的结果: C:\Users\jacky\Desktop>python xx.py 请输入一个整数:6 请再输入一个整数:3 结果为2.0,小于10 C:\Users\jacky\Desktop>python xx.py 请输入一个整数:88 请再输入一个整数:8 自定义异常类:结果大于或等于10 ###### 例子二:(类使用自定义异常类) #coding=utf-8 class class8(Exception): #先自定义一个名为class8()的子类,其继承于父类Exception() def __init__(self,message): Exception.__init__(self) self.message = message class class1(): def func1(self): self.x = int(input("请输入一个整数:")) self.y = int(input("请再输入一个整数:")) self.num = self.x / self.y return self.num def func2(self): #引发class8()的异常 try: raise class8("自定义异常类:结果大于或等于10") except class8 as e: print(e.message) def func3(self): print(f"结果为{self.num},小于10") if __name__ == '__main__': myclass = class1() Result_1 = myclass.func1() if Result_1 >= 10: #如果结果大于或等于10,就引发class8()的异常 myclass.func2() else: myclass.func3() 多次运行脚本的结果: C:\Users\jacky\Desktop>python xx.py 请输入一个整数:6 请再输入一个整数:3 结果为2.0,小于10 C:\Users\jacky\Desktop>python xx.py 请输入一个整数:88 请再输入一个整数:8 自定义异常类:结果大于或等于10 ###### 类使用Socket检测远程主机的TCP端口 #coding=utf-8 import socket import datetime dt = datetime.datetime.now() tt = dt.strftime('%Y%m%d_%H%M%S') class class1(): def __init__(self,host,port): self.host = host self.port = port def func1(self): try: s = socket.socket(socket.AF_INET, socket.SOCK_STREAM) s.connect((self.host, self.port)) Result_1 = f"检测时间:{tt} 目标主机{self.host}的TCP端口{self.port}是通的;" print(Result_1) except: Result_2 = f"检测时间:{tt} 目标主机{self.host}的TCP端口{self.port}是不通的;" print(Result_2) print("失败记录写到error.txt。") #把失败的输出结果写入(追加)到文件D:\error.txt;文件不存在时,会自动创建 Path_1 = r'D:/error.txt' f_name = open(Path_1,'a') print(Result_2,file=f_name) else: print("成功记录写到success.txt。") #把成功的输出结果写入(追加)到文件D:\success.txt;文件不存在时,会自动创建 Path_1 = r'D:/success.txt' f_name = open(Path_1,'a') print(Result_1,file=f_name) if __name__ == '__main__': ### 多次执行类,就可以一次性检测多台主机的多个端口了 myclass=class1("www.baidu.com",80) myclass.func1() myclass=class1("blog.zhuohua.store",80) myclass.func1() myclass=class1("47.75.39.177",21) myclass.func1() 脚本运行的结果: C:\Users\jacky\Desktop>python xx.py 检测时间:20190202_234526 目标主机www.baidu.com的TCP端口80是通的; 成功记录写到success.txt。 检测时间:20190202_234526 目标主机blog.zhuohua.store的TCP端口80是通的; 成功记录写到success.txt。 检测时间:20190202_234526 目标主机47.75.39.177的TCP端口21是不通的; 失败记录写到error.txt。 笺注:假如脚本不断地运行,不同的结果就会不断地追加到不同文件。 文件D:\success.txt里的记录结果: 检测时间:20190202_234526 目标主机www.baidu.com的TCP端口80是通的; 检测时间:20190202_234526 目标主机blog.zhuohua.store的TCP端口80是通的; 文件D:\error.txt里的记录结果: 检测时间:20190202_234526 目标主机47.75.39.177的TCP端口21是不通的; 相关文章: 自定义函数 匿名函数 Windows使用第三方库psutil Python3管理Linux的软件进程 Python3调用另外一个脚本的函数/类 try语句 for循环语句 文件操作(复制、重命名、删除等) Pandas的进阶(二) CentOS6使用tcping+crontab计划任务 CentOS8使用Socket(检测TCP端口) Python3制作猜字游戏 Windows下Python3管理Excel表+绘图库Matplotlib Windows下Python3管理Access+绘图库Matplotlib




欢迎光临 blog.zhuohua.store (http://blog.zhuohua.store/) Powered by Discuz! 7.2