前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >面向对象多继承,网络编程,编写网络相关程

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

作者头像
py3study
发布2020-01-19 15:51:13
2620
发布2020-01-19 15:51:13
举报
文章被收录于专栏:python3python3

一丶面向对象多继承

1.先找左边再找右边

代码语言:javascript
复制
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算法)

代码语言:javascript
复制
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算法

代码语言:javascript
复制
Foo + (C,D,F,G) + (G,D,G,W) + (I,G,D,G,W) 

Foo, I,B

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


在python 3.x中取消了经典类,默认都是新式类,并且不必显式的集成object
也就是说
代码语言:javascript
复制
class Person(object):pass
class Person():pass
class Person:pass
三种写法并无区别,推荐第一种
代码语言:javascript
复制
但是在python 2.x中,默认都是经典类,只有显式继承了object才是新式类,
即:
代码语言:javascript
复制
class Person(object):pass 新式类写法
class Person():pass 经典类写法
class Person:pass 经典类写法
代码语言:javascript
复制
作者:王猫猫
链接: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, 阻塞:等待服务器发来的数据

代码语言:javascript
复制
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()

服务器端

代码语言:javascript
复制
# 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()

客户端一

代码语言:javascript
复制
# 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()

客户端二

本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2019-03-06 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档