1.#面向对象
#抽象接口 === 抽象类
#就是架构师给你一个架子,你们去写,如果满足不了直接报错
 #python2
 print("python2---抽象类".center(20,'#'))
 import abc    #需要在python2中测试,如果直接运行会报错
 #因为没有调用send方法
 class Alert(object):
     '''报警基类'''
     __metaclass__ = abc.ABCMeta
     @abc.abstractmethod
     def send(self):   #特指了 子类必须实现send方法
         '''报警消息发送接口'''
         pass
 class MailAlert(Alert):  #报错函数
     pass
 # class MailAlert(Alert):  #正确函数
 #     def send(self,msg):
 #         print("-----right---",msg)
 m = MailAlert()
 m.send()
 #m.send('hello')

 print("python3---抽象类".center(20,'#'))
 class Alert(object):
     '''报警基类'''

     def send(self):   #特指了 子类必须实现send方法
         '''报警消息发送接口'''
         raise NotImplementedError  #主动报错
 # class MailAlert(Alert):  #报错函数
 #     pass
 class MailAlert(Alert):  #正确函数
     def send(self):
         print("-----right---")
 m = MailAlert()
 m.send()

2.静态方法

 ):
     def __init__(self,name):
         self.name = name
     def eat(self):
         print("%s is eating...." % self.name)
 p = person("alex")
 p.eat()

 print("转为静态方法".center(20,'#'))
 #为了解决实例化占用内存,但是到时候会需要考虑一下是不是需要真的真么多实例
 #静态方法就是不需要实例化
 class person(object):
     def __init__(self,name):
         self.name = name
     @staticmethod
     def eat(name,food):#静态方法不能访问公有属性,也不能访问实例
         print("%s is eating...." % name,food)
 # p = person("alex") #不需要实例了
 person.eat("alex","shit")

3.类方法

 print("类方法".center(20,'#'))
 class person(object):
     name = "rain"
     def __init__(self,name):
         self.name = name
     @classmethod  #类方法
     def walk(self): #类方法只能反问类的公有属性不能访问实力属性
         print("%s is walking.." % self.name)
 p = person("alex")
 p.walk()
 #所以打印出来的是rain在walk

4.属性方法

 print("属性方法".center(20,'#'))
 class person(object):
     name = "rain"
     def __init__(self,name):
         self.name = name
     @property  #属性方法的作用是把一个方法变成一个静态属性
     def talk(self):
         print("%s is talking.." % self.name)

     @talk.setter
     def talk(self,msg):
         print("set msg:",msg)

     @talk.deleter
     def talk(self):
         print("delet talk...")

 p = person("alex")
 p.talk #调用不需要加(),相当于你访问的变量其实是一个方法 读取值
 p.talk = "hello" #这个赋值变量在调用方法 修改值
 del p.talk #这个是删除 删除值
 #作用可以参考航班实例

5.其他方法

 print("其他方法".center(20,'#'))
 class person(object):
     '''hahahahahah'''
     def __init__(self,name):
         self.name = name
     def tell(self):
         print("what do you say... %s" % self.name)
 p = person("jack")
 p.tell()
 print(p.__doc__) #打印类的注释打印  hahahahah
 print(p.__module__) #当前哪个模块  __main__表示当前的某块就在当前
 print(p.__class__) #当前哪个类

 #***当属性方法航班状态查询加个判断if __name__ == '__main__':
 #这样的话在被调用的时候执行了以上的代码,而不被调用一下的调用

 # print("字符串导入模块".center(20,'#'))
 # from day import 属性方法航班状态查询
 # mod = __import__('day8work.属性方法航班状态查询')
 # print(mod.属性方法航班状态查询.Filght('ca980'))

6.创建类的方法

 print("meta".center(20,'#'))
 #普通创建类的方法
 class Foo(object):
     def __init__(self, name):
         self.name = name
 f = Foo("alex")
 print(type(f)) #f 由foo  foo由 type  生成
 print(type(Foo))
 #特殊方法创建类
 def talk(self,msg):
     print("%s is talking:%s" % (self.name,msg)) #里面小括号续加上,不然调用不了
 def __init__(self,name):
     self.name = name
 dog = type('dog',(object,),{"talk":talk,"__init__":__init__})
 print(dog)
 d = dog("alex")
 d.talk("eat")

7.异常处理基本机构种类

 print("异常处理".center(20,'#'))
 # while True:
 #     try:
 #         a1 = input('>>>')
 #         a2 = input('>>>')
 #         a1 = int(a1)
 #         a2 = int(a2)
 #         a3 = a1 + a2
 #         print(a3)
 #     except Exception as e:
 #         # print(e) #e 里面包括的错误信息
 #         print("你输入的错误")
 #基本结构
 # try:
 #     代码块
 #     代码块
 # except Exception as e:  e 其实就是exception的对象,可以使用其他名称代替
 #     将错误信息写入日志文件

 #复杂结构
 # try:
 #     ...
 # except:
 #     ...
 # else: 没有错误的时候执行
 #     ...
 # finally:  正确与否,代码肯定要执行的
 #     ...

 #异常对象
 try:
     int('fdsfdsf')
 except Exception as e:
     print(e)   #invalid literal for int() with base 10: 'fdsfdsf'

 try:
     li = [11,22]
     li[3]
 except Exception as e: #python内部将错误信息封装到e的对象中,就是exceptino
     print(e) #list index out of range

 #异常种类
 #Exception #能将所有的异常都捕获
 # ...
 # 其他     只能处理某一种情况
 # try:
 #     代码块
 #     代码块
 # except ValueErroras e:
 #     将错误信息写入日志文件
 # except KeyError as e:
 #     将错误信息写入日志文件
 # except Exception as e:
 #     将错误信息写入日志文件
 # ValueError  可以替换Exception
 # KeyError
 # IOError
 # IndexError

8.主动触发异常,程序分层

 #主动触发异常  程序分层
 try:
     raise Exception('error') #主从触发将错误信息封装到e里面
 except Exception as e:
     print(e)

 # try:
 #     result = fool()    拿到返回值来判断,就是没有异常,但是邮件没有发送成功
 #     if result:
 #         pass
 #     else:
 #         raise Exception('邮件发送失败')
 #     foo2()
 # except Exception as e:
 #     记录日志

9.断言

 print("断言".center(20,'#'))
 #ios 去打开 安卓的app是不是直接就断开了
 #所以在开始之前先判断,例如系统
 # assert(关键字) 条件
 print(1)
 assert 1==1   # assert 1==2  只显示1并且抛出错误
 print(2)

10.自定义异常

 print("自定义异常".center(20,'#'))
 #开发一个类,来继承exception 来实现满足你自己定义的异常
 class lilierror(Exception):
     def __init__(self,msg):
         self.msg = msg
         super(lilierror,self).__init__(msg)#执行父类的构造方法
 try:#如果想要打印出来msg必须加上,不然父类不知道
     name = 'alex'
     if name != 'lili':
         raise lilierror('哈哈哈 lili我错了')
 except IndexError as e:
     print(e)
 except lilierror as e:
     print(e,e.msg)  #这个就是调用类方法来显示了
 except Exception as e:
     print(e,1111)
 #重点  1 2 3 4 5  断言和自定义异常很少用  基本代码块+主动触发异常

11.反射

 #反射写法
 # inp = input("请输入url")     #account/login
 # m,n = inp.split('/')  #m account  n login
 # from  dir import app
 # action = input('>>')  #可以用户输入
 # # if(hasattr(app,action)):
 #     func =getattr(account,action)
 # v = getattr(app,action)
 # result = v()
 # print(result)

 #getattr() 专以字符串的形式去某个对象中获取指定的属性
 #hasattr() 以字符串的形式去某个对象中是否含有指定的属性
 #setattr(容器,名称,值) 以字符串的形式去某个对象中设置指定的属性
 #delattr() 以字符串的形式去某个对象中删除指定的属性

 # from  dir import app
 # action = input('>>')  #可以用户输入
 # if(hasattr(app,action)):
 #     func =getattr(account,action)
 #     result = func()
 #     else
 #     result = '404'
 #     print(result)

 #反射最终版
 #通过字符串导入模块,可以实现某块/函数  这样的话通过/分割,就可以实现直接调用
 #module = __import__('dir.app',formlist=Ture)  这样的话相当于导入模块不加TRUE的话,前面是什么就是什么了
 # while True:
 #     inp = input("请输入url")
 #     m,n = inp.split('/')
 #     try:
 #         module = __import__('dir.%s' % m,fromlist=True)
 #         if hasattr(module,n):
 #             func =getattr(module,n)
 #             result = func()
 #         else:
 #             result = 404
 #     except Exception as e:
 #         result = '500'
 #     print(result)

12.socket编程

 #socket   osi 七层   tcp 三次握手
 #服务器端
 #socket.socket(AF_INET,SOCK_STREAM) 先创建sock实例
 #server.bind('0.0.0.0',8000)  监听Ip端口
 #server.listen(5)  可以多个并列
 #server.accept()  接收请求
 #conn(建立链接),client_addr(地址) = server.accept()
 #conn.send()  发送消息
 #conn.recv()  接收消息
 #server.close()
 #server.send()

 #客户端
 # socket.socket(AF_INET,SOCK_STREAM)
 # client.connect()
 # client.send()

12.socket编程  c s架构

client 端的代码量

 #!/usr/bin/env python
 #_*_coding:utf-8_*_

 # import socket
 # client = socket.socket()
 # client.connect(("localhost",9998))
 # while True:
 #     msg = input(">>:").strip()
 #     if len(msg) == 0: continue
 #     client.send(msg.encode("utf-8"))
 #     data = client.recv(1024)
 #     print("来自服务器:", data)
 # client.close()

 #基本结构
 # import socket
 # client = socket.socket()
 # client.connect(('localhost',8000))
 # client.send(b'hello')
 # date = client.recv(1024)
 # print(date)

 #
 # #循环收发
 # import socket
 # client = socket.socket()
 # client.connect(('localhost',8000))
 # while True:
 #     client.send(b'hello')
 #     date = client.recv(1024)
 #     print(date)

 #单循环客户发送信息
 # import socket
 # client = socket.socket()
 # client.connect(('localhost',8000))
 # while True:
 #     msg = input('>>>:').strip()
 #     if len(msg) == 0: continue
 #     client.send(msg.encode())
 #     date = client.recv(1024)
 #     print('laizisever',date)

 #排列链接
 # import socket
 # client = socket.socket()
 # client.connect(('localhost',8000))
 # while True:
 #     msg = input('>>>:').strip()
 #     if len(msg) == 0: continue
 #     client.send(msg.encode())
 #     date = client.recv(1024)
 #     print('laizisever',date)
 #

 #调用Linux系统命令实现ssh  top -bn 1
 # import socket
 # client = socket.socket()
 # client.connect(('10.10.10.140',8002))
 # while True:
 #     msg = input('>>>:').strip()
 #     if len(msg) == 0: continue
 #     print('to server', msg)
 #     client.send(msg.encode())
 #     date = client.recv(1024)
 #     print(date.decode())

 #调用Linux系统命令实现ssh  top -bn 1   将接收大文件数据
 import socket
 client = socket.socket()
 client.connect(('10.10.10.140',8002))
 while True:
     msg = input('>>>:').strip()
     if len(msg) == 0: continue
     print('to server', msg)
     client.send(msg.encode())
     date = client.recv(1024)
     print("res:",date.decode())
     total_size = int(date.decode())
     recevied_size = 0
     res = b''
     while recevied_size < total_size:
         d = client.recv(1024)
         res += d

         recevied_size += len(d)
     print("rece done----")
     print(res.decode())

server 端的代码量

 #!/usr/bin/env python
 #_*_coding:utf-8_*_

 # import socket
 # server = socket.socket() #获得socket实例
 #
 # server.bind(("localhost",9998)) #绑定ip port
 # server.listen()  #开始监听
 # print("等待客户端的连接...")
 # conn,addr = server.accept() #接受并建立与客户端的连接,程序在此处开始阻塞,只到有客户端连接进来...
 # print("新连接:",addr )
 # while True:
 #     data = conn.recv(1024)
 #     print("收到消息:",data)
 #     conn.send(b"server")
 # server.close()

 #基本结构
 # import socket
 # server = socket.socket(socket.AF_INET,socket.SOCK_STREAM)
 # server.bind(('0.0.0.0',8000))
 # server.listen(5)
 # # print("hahahahaha")
 # conn,client_addr = server.accept()
 # print(conn,client_addr)
 # date = conn.recv(1024)
 # conn.send(b'woshisever')
 # print(date)

 # #循环收发
 # import socket
 # server = socket.socket(socket.AF_INET,socket.SOCK_STREAM)
 # server.bind(('0.0.0.0',8000))
 # server.listen(5)
 # conn,client_addr = server.accept()
 #
 # while True:
 #     date = conn.recv(1024)
 #     print('shoudao client',date)
 #     conn.send(b'woshisever')

 #单循环收发客户端信息
 # import socket
 # server = socket.socket(socket.AF_INET,socket.SOCK_STREAM)
 # server.bind(('0.0.0.0',8000))
 # server.listen(5)
 # conn,client_addr = server.accept()
 #
 # while True:
 #     date = conn.recv(1024)
 #     print('shoudao client',date)
 #     conn.send(b'woshisever')

 #排列链接,当一个断块,另一个可以链接
 # import socket
 # server = socket.socket(socket.AF_INET,socket.SOCK_STREAM)
 # server.bind(('0.0.0.0',8000))
 # server.listen(5)
 #
 # while True:
 #     conn,client_addr = server.accept()
 #
 #     while True:
 #         try:
 #             date = conn.recv(1024)
 #             print('shoudao client',date)
 #             conn.send(b'woshisever')
 #         except ConnectionResetError as e:
 #             print(e)
 #             break

 #调用Linux系统命令实现ssh
 # import socket
 # import subprocess
 # server = socket.socket(socket.AF_INET,socket.SOCK_STREAM)
 # server.bind(("0.0.0.0",8002))
 # server.listen(5)
 # print("--------listen-----------")
 #
 # while True:
 #     conn,client_addr = server.accept()
 #     while True:
 #         date = conn.recv(1024)
 #         print("recv from cli:",date)
 #         res = subprocess.Popen(date,shell=True,stdout=subprocess.PIPE,stderr=subprocess.PIPE)
 #         conn.send(res.stdout.read())

 #调用Linux系统命令实现ssh  实现大数据返回消息
 # import socket
 # import subprocess
 # server = socket.socket(socket.AF_INET,socket.SOCK_STREAM)
 # server.bind(("0.0.0.0",8002))
 # server.listen(5)
 # print("--------listen-----------")
 #
 # while True:
 #     conn,client_addr = server.accept()
 #     while True:
 #         date = conn.recv(1024)
 #         print("recv from cli:",date)
 #         res_obj = subprocess.Popen(date,shell=True,stdout=subprocess.PIPE,stderr=subprocess.PIPE)
 #         res = res_obj.stdout.read()
 #         conn.send(str(len(res)).encode())
 #         conn.send(res)

python学习道路(day8note)(抽象类,类的方法,异常处理,socket编程)的更多相关文章

  1. python学习日记(基础数据类型及其方法01)

    数字 int 主要是用于计算的,常用的方法有一种 #既十进制数值用二进制表示时,最少使用的位数i = 3#3的ASCII为:0000 0011,即两位 s = i.bit_length() print ...

  2. Python学习系列(九)(IO与异常处理)

    Python学习系列(九)(IO与异常处理) Python学习系列(八)( 面向对象基础) 一,存储器 1,Python提供一个标准的模块,称为pickle,使用它既可以在一个文件中存储任何Pytho ...

  3. python学习道路(day7note)(subprocess模块,面向对象)

    1.subprocess模块   因为方法较多我就写在code里面了,后面有注释 #!/usr/bin/env python #_*_coding:utf-8_*_ #linux 上调用python脚 ...

  4. Python学习笔记总结(三)类

    一.类简单介绍 1.介绍 类是Python面向对象程序设计(OOP)的主要工具,类建立使用class语句,通过class定义的对象. 类和模块的差异,类是语句,模块是文件. 类和实例 实例:代表程序领 ...

  5. Python学习总结19:类(一)

    在Python中,可以通过class关键字定义自己的类,通过类私有方法“__init__”进行初始化.可以通过自定义的类对象类创建实例对象. class Student(object): count ...

  6. python学习小结4:类

    虽然Python是解释性语言,但是它是面向对象的,能够进行对象编程. 类和对象是面向对象编程的两个主要方面.类:创建一个新类型,而对象是这个类的实例,类使用class关键字创建.类的域和方法被列在一个 ...

  7. python学习笔记(六)、类

    Python与java.c++等都被视为一种面向对象的语言.通过创建自定义类,用于处理各种业务逻辑.面向对象有封装.继承.多态三个特征,这也是面子对象语言的通用特征. 1 封装 封装,是值向外部隐藏内 ...

  8. 调用其他python脚本文件里面的类和方法

    问题描述: 自己编写了若干个Python脚本. 在testC.py里面需要调用testA.py和testB.py里面的若干类和方法.要怎么办? 需要都打包.安装,再去调用吗? 其实不必那么麻烦. 这里 ...

  9. day07 类的进阶,socket编程初识

    类的静态方法: 正常: 添加静态方法: 就会变成一个函数,不会自动传self 参数,不会调用类的变量和实例的变量  不在需要self 名义上归类管,但是它就是一个单独的函数,不在需要传入self,想怎 ...

随机推荐

  1. ViewState与Session [转]

    昨天偶然看到网上有人讨论究竟是该用viewstate还是session来保存信息. 忽然觉得有必要去深入的研究一下这两个东东了,我们先来看深入分析一下viewstate, 为了分析的相对完整性,先从简 ...

  2. i春秋手动病毒查杀

    1:查看系统进程程   tasklist命令 2:当任务管理器无法打开的时候可以利用 taskkill /f /im [程序所显示的pid]   两个参数的意思分别是强制和程序在内存中的印象 3:ms ...

  3. ASP.NET SignalR 与 LayIM2.0 配合轻松实现Web聊天室 实战系列

    ASP.NET SignalR 与 LayIM2.0 配合轻松实现Web聊天室(零) 前言  http://www.cnblogs.com/panzi/p/5742089.html ASP.NET S ...

  4. AngularJS 表单

    AngularJS 表单是输入控件的集合. HTML控件 以下 HTML input 元素被称为 HTML 控件: input 元素 select 元素 button 元素 textarea 元素 H ...

  5. 【Java EE 学习 29 下】【JDBC编程中操作Oracle数据库】【调用存储过程的方法】

    疑问:怎样判断存储过程执行之后返回值是否为空. 一.连接oracle数据库 1.需要的jar包:在安装的oracle中就有,所以不需要到官网下载,我的oracle11g下:D:\app\kdyzm\p ...

  6. 创建好Android Application Project 后运行就报错。

    如图: 这个问题有可能是有可能是没导入Android support库,简单了解一下: google提供了Android Support Library package 系列的包来保证来高版本sdk开 ...

  7. android中四大组件之间相互通信

    好久没有写有关android有关的博客了,今天主要来谈一谈android中四大组件.首先,接触android的人,都应该知道android中有四大组件,activity,service,broadca ...

  8. Codeforces 307 div2 E.GukiZ and GukiZiana 分块

    time limit per test 10 seconds memory limit per test 256 megabytes input standard input output stand ...

  9. CentOS 6.5 下 CDH 5.2.1 集群安装(一)

    集群节点数量3 个 192.168.1.170 cdh-master 192.168.1.171 cdh-slave-1 192.168.1.171 cdh-slave-2 一.安装CentOS6.5 ...

  10. 【软件推荐】 Moom-窗口布局软件(V.3.2.2)【破解+汉化】

    本文并非最终版本,如有更新或更正会第一时间置顶,联系方式详见文末 如果觉得本文内容过长,请前往本人 “简书”     下载地址: 软件:https://yunpan.cn/cuTg8rCMTsLT6 ...