python7

1、反射编程

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

      Python一样具备反射机制,使用反射获取到的函数和方法能够像日常同样加上括号直接调用,获取到类后能够直接构造实例;不过获取到的字段不能直接赋值,由于拿到的实际上是另外一个指向同一个地方的引用,赋值只能改变当前的这个引用而已。网络

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

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

       getattr(object,attr,default):若是存在attr属性(方法)则返回attr的值(方法地址)不然返回default值。函数

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

       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)
复制代码

 输入已存在的方法code

>>:eat
bobo is eating

输入不存在的方法server

>>:sleepy
bobo 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)
复制代码

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

>>:name
poppy

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

>>:age
8

 2、网络编程

      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()
相关文章
相关标签/搜索