博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
python7
阅读量:4933 次
发布时间:2019-06-11

本文共 2720 字,大约阅读时间需要 9 分钟。

一、反射

      在计算机科学领域,反射是指一类应用,它们能够自描述和自控制。也就是说,这类应用通过采用某种机制来实现对自己行为的描述(self-representation)和监测(examination),并能根据自身行为的状态和结果,调整或修改应用所描述行为的状态和相关的语义。

      Python同样具有反射机制,使用反射获取到的函数和方法可以像平常一样加上括号直接调用,获取到类后可以直接构造实例;不过获取到的字段不能直接赋值,因为拿到的其实是另一个指向同一个地方的引用,赋值只能改变当前的这个引用而已。

       反射机制的实现依赖一下几个内置函数:

       hasattr(object, attr):判断object中是否存在attr属性或方法,存在则返回True,否则返回False

       getattr(object,attr,default):如果存在attr属性(方法)则返回attr的值(方法地址)否则返回default值。

       setattr():对容器中以参数为名称的内容进行修改

       delattr():删除容器中以参数为名称的内容

 例如下:定义一个Dog类并实例化,判断用户输入的内容是否是Dog中的方法,如果是执行该方法,如果不是,则添加为该对象的方法
1 def bark(self): 2     print('%s bark loudly'%self.name) 3 4 def sleep(self): 5 print('%s is sleeping'%self.name) 6 7 8 class Dog(object): 9 def __init__(self,name): 10 self.name = name 11 def eat(self): 12 print('%s is eating'%self.name) 13 14 d = Dog('bobo') 15 choice = input('>>:').strip() 16 17 if hasattr(d,choice): 18 19 func = getattr(d,choice) 20 func() 21 22 else: 23 setattr(d,choice,sleep) 24 func = getattr(d, choice) 25 func(d)

 输入已存在的方法

>>:eatbobo is eating

输入不存在的方法

>>:sleepybobo is sleeping

如果要判断对象中是否存在某属性,方法与上面相同

1 class Dog(object): 2     def __init__(self,name): 3 self.name = name 4 def eat(self): 5 print('%s is eating'%self.name) 6 7 d = Dog('poppy') 8 9 choice = input('>>:').strip() 10 11 if hasattr(d,choice): 12 attr = getattr(d,choice) 13 print(attr) 14 else: 15 setattr(d, choice, '8') 16 new_attr = getattr(d,choice) 17 print(new_attr)

输入已经存在的属性则打印出该属性值

>>:namepoppy

输入不存在的属性值,则为对象添加该属性,并赋值为8

>>:age8

 二、网络编程

      Python 提供了两个基本的 socket 模块。

      第一个是 Socket,它提供了标准的 BSD Sockets API。

      第二个是 SocketServer, 它提供了服务器中心类,可以简化网络服务器的开发。

套接字之间的连接过程可以分为三个步骤:服务器监听,客户端请求,连接确认。

(1)服务器监听:是服务器端套接字并不定位具体的客户端套接字,而是处于等待连接的状态,实时监控网络状态。

(2)客户端请求:是指由客户端的套接字提出连接请求,要连接的目标是服务器端的套接字。为此,客户端的套接字必须首先描述它要连接的服务器的套接字,指出服务器端套接字的地址和端口号,然后就向服务器端套接字提出连接请求。

(3)连接确认:是指当服务器端套接字监听到或者说接收到客户端套接字的连接请求,它就响应客户端套接字的请求,建立一个新的线程,把服务器端套接 字的描述发给客户端,一旦客户端确认了此描述,连接就建立好了。而服务器端套接字继续处于监听状态,继续接收其他客户端套接字的连接请求。

例客户端程序:

1 import socket 2 client = socket.socket()#声明socket 类型,同时生成socket连接对象 3 client.connect(('localhost',6969)) 4 while True: 5 msg = input('>>>:').strip()#不可以send空值 6 #client.send(b'你好jim'.encode('utf_8')) # py3 中只能发送字节 7 if len(msg) == 0: 8 continue 9 client.send(msg.encode('utf_8')) 10 data = client.recv(1024) 11 print('received :', data) 12 client.close()

 服务器端程序:

1 import socket 2  3 server = socket.socket() 4 server.bind(('localhost',6969))#绑定要监听的端口 5 server.listen(5)#最大允许排队数 6 print('start to wait!') 7 while True: 8 # conn就是客户端连过来而在服务器端为其生成的一个连接实例 9 conn, addr = server.accept() # 等待 10 11 print(conn, addr) 12 13 print('phone comed!') 14 while True: 15 data = conn.recv(1024) 16 17 print('recv:', data) 18 19 conn.send(data.upper()) 20 21 server.close()

转载于:https://www.cnblogs.com/mrdz/p/5972188.html

你可能感兴趣的文章
《写给大忙人看的java se 8》笔记
查看>>
倒计时:计算时间差
查看>>
Linux/windows P2V VMWare ESXi
查看>>
Windows XP倒计时到底意味着什么?
查看>>
运维工程师在干什么学些什么?【致菜鸟】
查看>>
Linux中iptables详解
查看>>
java中回调函数以及关于包装类的Demo
查看>>
maven异常:missing artifact jdk.tools:jar:1.6
查看>>
终端安全求生指南(五)-——日志管理
查看>>
Nginx 使用 openssl 的自签名证书
查看>>
创业维艰、守成不易
查看>>
PHP环境安装套件:快速安装LAMP环境
查看>>
CSS3
查看>>
ul下的li浮动,如何是ul有li的高度
查看>>
C++ primer plus
查看>>
python mysqlDB
查看>>
UVALive 3942 Remember the Word Tire+DP
查看>>
从微软的DBML文件中我们能学到什么(它告诉了我们什么是微软的重中之重)~目录...
查看>>
被需求搞的一塌糊涂,怎么办?
查看>>
c_数据结构_队的实现
查看>>