Python学习-day7_donghan2409的博客-程序员秘密

技术标签: python  

一、反射

      在计算机科学领域,反射是指一类应用,它们能够自描述和自控制。也就是说,这类应用通过采用某种机制来实现对自己行为的描述(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)
View Code

 输入已存在的方法

>>:eat
bobo is eating

输入不存在的方法

>>: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)
View Code

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

>>:name
poppy

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

>>:age
8

 二、网络编程

      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()
View Code

 服务器端程序:

 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()
View Code

 

转载于:https://www.cnblogs.com/iclq/p/5849285.html

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/donghan2409/article/details/101737866

智能推荐

【C语言训练】自守数问题_s零露漙兮的博客-程序员秘密

题目描述自守数是指一个数的平方的尾数等于该数自身的自然数。 例如: 25^2=625 76^2=5776 9376^2=87909376 请求出200000以内的自守数?输入输出200000以内的自守数(包括0, 数之间用两个空格分开,包括末尾空格) 0  1  5  6  25  76  376  625  ????  ????  ..

只用css和html实现简单的图片轮播效果_AsianPangolin的博客-程序员秘密_html四张照片怎么做轮播

用css和html实现简单的图片轮播效果这是html的代码<!DOCTYPE html><html lang="en"><head> <meta charset="UTF-8"> <title>css轮播</title> <link rel="stylesheet" href="轮播.css" type="...

oracle11g配置dataguard,Oracle11gDataGuard保护模式设置详解_豆豆豆豆豆豆豆叶的博客-程序员秘密

在正常情况下,此保护模式同Maximum Protection,需要恢复此事务的所有redo 数据都同步写到主库online redo file 和备库的standby先说说DG的三种保护模式Maximum Protection:最大保护模式,不允许数据丢失,所有事务必须完成主备库的日志写后才能提交,如果主备库之间网络异常,将会严重影响主库性能。Maximum Performance:此为DG的默...

一阶RC滤波器,数字滤波器_一路向北到内蒙古的博客-程序员秘密

目前,项目需要处理信号。目标信号是特定频率范围内的信号。高频视为干扰。而一阶RC滤波器容易实现。但是网上资料往往没有详细的推导。因此在这里把笔记记下。本文的优势是比较详细,参数配置都有公式依据。目录1、一阶RC低通滤波器的算法实现1.1 算法推导1.2 波特图1.3 用C语言实现2、一阶RC高通滤波器的原理以及实现2.1 原理推导2.2 波特图2.3 用C语言...

Revit API: Pipe & Duct -管道和风管_极客BIM工作室的博客-程序员秘密_revit开发 duct和pipe

从设计思路上看,Pipe & Duct -管道和风管本身有对应的构件,但他们的类型分别作为管道系统和机械系统的入口。而结构中的梁系统则不同,是一个单独的可被选中的构件,且有独立的入口按钮。因此,可以认为 Revit 这里针对抽象的系统,有两种不同类型的实现。...

操作系统(4)—— 局部/ 全局页面置换算法_Sherry_wang168的博客-程序员秘密_局部页面置换和全局页面置换

局部页替换算法一、最优页面置换算法功能目标功能:当缺页中断发生,需要调入新的页面。内存已满时,选择内存当中哪个物理页面被置换。目标:尽可能的减少页面的换进换出次数,即缺页中断的次数。具体来说,把未来不再使用或者短期内较少使用的页面换出,通常只能在局部性原理指导下依据过去的统计数据来进行预测。页面锁定(frame locking):用于描述必须常驻内存的操作系统的关键部分或时间...

随便推点

RSA算法计算公钥和私钥_Florab的博客-程序员秘密_rsa私钥怎么算

选择素数: p=47 和 q=71,并选取e=79,求出RSA算法的公钥和私钥。答:n = 47×71 = 3337 ; φ(n) = 46×70 = 3220 ;下面利用扩展的欧几里得算法私钥d满足:79d – 3220k = 1 ①将3220对79取模得到的余数60代替3220,变为79d - 60k = 1 ②将79对60取模得到的余数19代替79,变为19d – 60k = 1 ...

js原生特效_北冥道人的博客-程序员秘密

北冥做了个小玩意,构思和算法都很巧妙,小伙伴吧可以瞅瞅哦话不多说,源码奉上(~+~)<!DOCTYPE html><html> <head> <meta charset="utf-8"> <title>北冥想当黑客啦</title> <style&...

【数学】JZOJ_3318 LOJ_2685 「BalticOI 2013」Brunhilda 的生日 Brunhilda’s Birthday_nymph181的博客-程序员秘密

题意给出若干个质数,有QQQ个询问,每次询问这个数减去这个数%\%%其中一个质数,直到这个数变成000,求出最少操作次数。思路首先设fif_ifi​为数iii的答案,那么可以得出方程:fi=min⁡{fi−i%pj}+1f_i=\min \{ f_{i-i\%p_j} \}+1fi​=min{fi−i%pj​​}+1时间复杂度为O(NM)O(NM)O(NM),直接爆炸。考虑快速得出mi...

Python 处理数据集,合并多个文件/随机划分为train/valid/test_松鼠爆米花的博客-程序员秘密

对某个数据集进行处理,使之符合我的需要。import osimport shutilimport random# from xxx_dataset randomly choose images # to make a new data# 60% train # 20% valid# 20% testpath = '/remote-home/my/Databas...

Spring Boot 整合JetCache缓存框架实现本地caffeine远程redis存储_ggfvg777的博客-程序员秘密_caffeine jetcache

Spring Boot 整合JetCache缓存框架实现本地caffeine远程redis存储JetCache主要通过@Cached和@CreateCache实现缓存,@Cached是在接口方法或者类方法上添加缓存,一般以参数为key,以返回值为value存入缓存中。@CreateCache是直接创建一个缓存实例,然后调用put(Tkey, T value)、get(T key)等方法实现缓存。 <dependency> <groupId>org

解决MAC下Genymotion无法创建VirtualBox接口的问题_北渚007的博客-程序员秘密

创建RN项目时,想用Genymoiton新建一个Android模拟器,报错如下:An error has occurred while trying to create a virtualbox host-only network interface原因是VirtualBox下载失败,重新下载,在系统偏好设置 -> 安全性与隐私 -> 通用中,选择允许Oracle下载App参考官方文档:https://support.genymotion.com/hc/en-us/articles/3600