面向对象多继承,网络编程,编写网络相关程

发布时间:2019-03-06 17:16:22编辑:auto阅读(1728)

    一丶面向对象多继承

    1.先找左边再找右边

    class A(object):
        pass
    
    
    class B(object):
        def f1(self):
            print('B')
    
    
    class C(A,B):
        pass
    
    obj = C()
    
    obj.f1()
    多继承

    2.经典类和新式类

    经典类:

      新式类如果自己或者自己的前辈只要有人继承object,那么此类就是新式类

    新式类:

      经典类和新式类的查找成员的顺序不一样

        经典类,一条路走到黑(深度优先)

        新式类,c3算法实现(python2.3时更新c3算法)

    class A(object):
        pass
    
    class B(A):
        pass
    
    class C(B):
        pass
    
    class D(object):
        pass
    
    class E(D,C):
        pass
    
    class F(object):
        pass
    
    class G(F):
        pass
    
    class H(C,G):
        pass
    
    class Foo(E,H):
        pass
    
    
    # print(E.__mro__)
    # print(H.__mro__)
    """
    L(Foo + L(E)  + L(H) )
    
    
    
    L(E) = E,D,C,B,A,object
    L(H) = H,C,B,A,G,F,object
    
    Foo = (object) + (G,F,object)
    Foo,E,D,H,C,B,A,G,F,object
    """
    print(Foo.__mro__)
    c3算法
    Foo + (C,D,F,G) + (G,D,G,W) + (I,G,D,G,W) 

    Foo, I,B

    注意事项:super 是遵循__mro__执行顺序
      获取第一个表头,和其它表位进行比较
        不存在则拿走
        如果存在,则放弃,然后获取第二个表的表头再次和其他表的表尾进行比较.


    在python 3.x中取消了经典类,默认都是新式类,并且不必显式的集成object
    也就是说
    class Person(object):pass
    class Person():pass
    class Person:pass
    三种写法并无区别,推荐第一种
    但是在python 2.x中,默认都是经典类,只有显式继承了object才是新式类,
    即:
    class Person(object):pass 新式类写法
    class Person():pass 经典类写法
    class Person:pass 经典类写法

     

    作者:王猫猫
    链接:https://www.zhihu.com/question/19698598/answer/12704353
    来源:知乎
    著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。
    
    1. print不再是语句,而是函数,比如原来是 print 'abc' 现在是 print('abc')但是 python2.6+ 可以使用 from __future__ import print_function 来实现相同功能> 
     2. 在Python 3中,没有旧式类,只有新式类,也就是说不用再像这样 class Foobar(object): pass 显式地子类化object但是最好还是加上. 主要区别在于 old-style 是 classtype 类型而 new-style 是 type类型>  
    3. 原来1/2(两个整数相除)结果是0,现在是0.5了python 2.2+ 以上都可以使用 from __future__ import division 实现改特性, 同时注意 // 取代了之前的 / 运算>  
    4. 新的字符串格式化方法format取代%错误, 从 python2.6+ 开始已经在str和unicode中有该方法, 同时 python3依然支持 % 算符> 
    5. xrange重命名为range同时更改的还有一系列内置函数及方法, 都返回迭代器对象, 而不是列表或者 元组, 比如 filter, map, dict.items 等>  
    6. !=取代  <   >  python2 也很少有人用  <  >  所以不算什么修改> 
    7. long重命名为int不完全对, python3 彻底废弃了 long+int 双整数实现的方法, 统一为 int , 支持高精度整数运算.>
    8. except Exception, e变成except (Exception) as e只有 python2.5 及以下版本不支持该语法. python2.6 是支持的. 不算新东西>  10. exec变成函数类似 print() 的变化, 之前是语句.
    python2.x 和 python 3.x的部分区别

     

    二丶 网络编程

    1.软件

      客户端:cs架构,client  -> server

      浏览器:Bs架构 browser ->server

    2.如何实现相互通信

     需求一: 编写两个软件(软件之间互相通信)

     需求二:两个人直接连接

     需求三:局域网互联

    3.基于socket模块实现网络通信

      为什么要向网络通信发送的是字节,而不是字符串?

       py.3 send/recv 都是字节

       py.2send/recv都是字符串

    服务器端:

       accept 阻塞:等待客户端连接.  

       recv 阻塞:等待服务器发来数据

    客户端:

       connect 阻塞一直在连接,直到连接成功才往下运行其他代码

       recv, 阻塞:等待服务器发来的数据

    import socket
    
    server = socket.socket()
    
    server.bind(('192.168.13.155',8001))
    
    server.listen(5)
    
    while True:
        conn,addr = server.accept()
        # 字节类型
        while True:
            data = conn.recv(1024) # 阻塞
            if data == b'exit':
                break
            response = data + b' SB'
            conn.send(response)
    
        conn.close()
    服务器端
    # by luffycity.com
    
    import socket
    
    client = socket.socket()
    
    # 王晓东向服务端发起连接请求(递伞)
    # 阻塞,去连接,直到连接成功后才会继续向下走。
    client.connect(('192.168.13.155',8000))
    
    
    # # 链接上服务端后,向服务端发送消息
    client.send(b'hello')
    
    
    # 王晓东等待服务端给他发送消息
    data = client.recv(1024)
    print(data)
    
    # 关闭自己
    client.close()
    客户端一
    # by luffycity.com
    
    
    import socket
    
    sk = socket.socket()
    
    sk.connect(('192.168.13.155',8001))
    
    while True:
        name = input("请输入姓名:")
        sk.send(name.encode('utf-8')) # 字节
        if name == 'exit':
            break
    
        response = sk.recv(1024) # 字节
        print(response.decode('utf-8'))
    
    sk.close()
    客户端二

     

     

     

     

     
    
    

     

关键字