zoukankan      html  css  js  c++  java
  • 面向对象编程和网络编程

    面向对象

    类与对象
    -__init__

     class Person:
        school='xxx'
        def __init__(self):  #对象初始化方法,对象的绑定方法,对象来调用会把对象传过来        
    		self.name='xxx'
    
    p=Person()   #类实例化产生对象会调用__init__
    
    print(p.school)
    Person.school='uuuu'
    p.school='yy'
    

    属性查找:包括数据属性,包括方法
    -数据属性:对象中找----》类中----》父类(按照mro查找)--》obj py2中没有mor这个东西
    -方法查找:对象的绑定方法---》父类中按照mro列表查找---》obj

    绑定方法:
    -定义在类内部,没有被任何装饰器装饰的函数,就是方法
    -给对象来用 对象.方法() 默认把对象自身传过去 ******特殊之处
    -类来调用就是普通函数,有几个值就传几个值

    对象之间的交互
    -把一个对象传到另一个对象中,操作这个对象
    -人狗大战

    三大特性:继承封装多态
    -继承:
    -在类名后的括号中写要继承的类,用逗号分隔
    -py中支持多继承(属性查找顺序)
    -新式类和经典类
    -继承了object的类都叫新式类(py3中都是新式类)
    -py2中才有新式类,经典类之说
    -菱形问题的查找:
    -广度优先:新式类
    -深度优先:经典类
    -mro列表
    -super() 特殊对象,调用父类的方法和属性(严格按照mro列表找的)
    -self和super的区别:self一定是从根上找,super()从当前位置按照mro列表找
    -类名.方法() 就是个普通函数,这个就不按照mro列表找了,指名道姓的来用
    -派生:字类多出来的属性,方法
    -多态和多态性
    -一个事务多种形态
    -多态性:执行同一个事物的同一个方法,表现出来的结果是不一样的
    -两种限制子类必须实现什么方法的方式
    -一个abc模块
    -raise抛异常
    -鸭子类型:走路像鸭子,你就是鸭子
    -len() 调用对象.__len__()
    -封装:
    -把属性和方法隐藏
    -以__开头,就会隐藏
    -并没有实际隐藏(做了变形)
    -隐藏属性:保证数据安全
    -隐藏方法:隔离复杂度
    -property 装饰器 包装成数据属性
    -其他两个装饰器
    -classmethod:类的绑定方法:可以类来调用会自动把类传入(对象也可以调用)
    -staticmethod:静态方法,谁都可以调用,不会自动传参数
    -元类:
    -__call__
    -__new__
    -__getattr__
    -__setattr__
    -__delattr__
    _type和object
    -反射(通过字符串去获取,删除,修改,对象的属性或方法)
    -hasattr
    -getattr
    -setattr
    -delattr
    -isinstance和issubclass

    super()

    网络编程

    网络是什么:链接介质+协议
    协议:osi7层
    5层协议:
    -物理层 01000101010
    -数据链路层:做分组:数据报/数据帧 mac
    -网络层:ip 通过ip得到mac地址---arp协议 mac地址学习
    -传输层:tcp/udp 三次握手四次挥手,可靠传输
    -应用层:写的程序都是应用层,基于socket(基于网络和传输抽象出来的)/http协议/邮件

    socket编写tcp的客户端和服务端:
    -传输文件:自己定制了协议
    -粘包问题终极解决方案
    -struct模块先把头的长度包成四个字节,发送四个字节
    -发送头
    -发送内容
    -接收端:
    -接收4个字节,解除头部长度
    -接收头部,取出数据长度
    -接收数据长度

    socket编写udp的客户端和服务端
    -不需要建立连接,传输不可靠,数据报协议(自己有头)

    socketserver写支持并发的服务端

    # with 上下文管理器
    with open('a.avi','rb') as f:
        for line in f:
            print(line)
    
    class Open():
        def __enter__(self):
            print('xxxxx')
            pass
        def __exit__(self, exc_type, exc_val, exc_tb):
            print('yyyyy')
            pass
    
    with Open() as f:
        # 代码
        f.name='xxx'
    
  • 相关阅读:
    在QT Assistant中添加帮助文档
    虚拟机下不能运行gazebo
    双系统Ubuntu无法访问Windows磁盘分区解决方法
    hexo双线部署及分流
    Apple Tree POJ
    ZOJ 3604 Tunnel Network(凯莱定理)
    C. Neko does Maths(数论 二进制枚举因数)
    Tree Cutting POJ
    Strategic game POJ
    Anniversary party POJ
  • 原文地址:https://www.cnblogs.com/17vv/p/11498385.html
Copyright © 2011-2022 走看看