心灵鸡汤
好书推荐:消费者行为学、围城、活着、盲井、三体、北京折叠
静态方法:
@staticmethod #名义上归类管,和类没什么关系,只是引用用"."
在静态方法中,无法访问类或实例的任何属性和方法
类方法:
@classmethod 只能访问类变量,不能访问实例变量
属性方法:
@property 把一个方法调用方式,变成一个静态属性,对用户隐藏其中的实现细节
@setter 属性方法的赋值
@deleter 属性方法的删除
深入讲解类的特殊成员方法:
__doc__ 说明文档
__module__ 模块相对引用路径
__class__ 类相对引用路径
__call__ 相当于对象后面跟()进行实例操作
__dict__ 查看类或者对象中的所有成员 类调用以及实例调用
__str__ 如果一个类中定义了__str__这个方法,那么在打印类的对象时,默认打印这个方法的返回值
__getitem__ 这三个方法可以构造一个字典类,封装自己想实现的方法,自定义一个类似字典的类
__setitem__
__delitem__
__new__
创建类的两种方式:普通方式、特殊方式
def func(self):
print("name is %s,age is %s"%(self.name,self.age))
def __init__(self,name,age):
self.name=name
self.age=age
Foo=type('Foo',(),{'talk':func,
'__init__':__init__})
__metaclass__ 元类 表示该类是由哪个类派生出来的
class Foo(object):
__metaclass__=Mytype 则该类由Mytype类继承来的
obj=Foo()
实现过程为:先调用Foo的元类Mytype的__call__(其中先__new__再__init__)
然后再调用Foo类的__call__方法执行___new__和__init__方法,以实例化Foo实例对象
反射详解:
可以用以下四种方法对类的实例中的属性或者方法名进行判断和处理
hasattr(obj,str) 判断是否存在指定字符串的属性或方法名
getattr(obj,str) 取得指定字符串的属性的属性值或方法名的内存地址
setattr(obj,str,str_name) 对该对象设置一个新的方法或属性值
delattr(obj,str) 删除该字符串的方法或属性
异常处理:
try:
code
except except_name1 as e:
print("except_name1 is happened",e)
except (except_name1,except_name2) as e:
print("except_name1 or except_name2 is happened",e)
except Exception as e:
print("其他未匹配到的异常发生",e)
else:
print("一切正常")
finally:
print("无论发生不发生异常,都会执行这里")
注意,如果是因为缩进格式错误,引起的异常是不会被Python解释器识别出来的,只会报错
自定义异常:
class AlexException(Exception):
def __init__(self,message):
self.message=message
# def __str__(self):
# return self.message
try:
# 想要主动触发异常,需要使用raise调用
raise AlexException("我自己触发的异常")
except AlexException as e:
print(e)
开始网络编程部分:
七层网络架构层的理解:
应用层
表示层
会话层
传输层
网络层
数据链路层
物理层
各种协议等:http、ftp、dns、dhcp、cimp ping(网络层)等,基本属于应用层
应用程序在网络间通讯,占用机器上的某一个端口,相当于总机+分机
Socket介绍:
电脑间数据传输,都是在TCP/IP协议 UDP协议规则下,基于IP地址、端口号的数据收、发。
TCP/IP:通讯要经历三次握手 (syn+recv)、四地断开
数据通信的伪代码图示:
洪水攻击:伪造IP地址头,实现瞬间大量链接占用
简单的收发实例的实现 参考代码目录20180807下
通过实例,学习了如何制作简单server-client1的交互
如何通过server向client传送一个较大的视频文件,可以用conn.sendall(data)一次传送,client中client.recv(10240000)多次接收来实现,一次能接收多少是要看系统缓存区大小的