返回列表 发帖

自定义类

类定义了集合中每个对象共有的属性和方法。


######

例子一:

#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
<class 'int'>
学生名称:zhuohua,分数:98
Welcome to zhuohua.
----------
68.5
<class 'float'>
学生名称: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
<class 'str'>
98
<class 'int'>
学生名称: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
<class 'int'>
计算结果为 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

返回列表