类的静态方法:
正常:


添加静态方法:

就会变成一个函数,不会自动传self 参数,不会调用类的变量和实例的变量 不在需要self

名义上归类管,但是它就是一个单独的函数,不在需要传入self,想怎么写就怎么写
类似于:

就是一个os类里有许多的可用的函数方法,相当于一个工具包
静态方法只对下面一个函数有作用, 其实就是一个装饰器






正确使用方法:

但是不能传变量,想传变量:

使用方法:

真正赋值:


想删除此变量 就删除

整合:



类的特殊成员方法:

写好注释



返回C 是从哪里导入的

输出类


不加这个方法:

加入__call__ 方法:

或者这样写:

运行结果:


以一个字典的形式把类里的属性,方法 打印出来


通过实例调用,只打印实例变量:

作用: 可以查看实例里有什么变量(属性)

没有的话:

加上:



设置:

获取:

删除: 不是真的删除,就是走到这一步,执行这个函数




Foo 就是来自于type Foo 后面的类就是type 类
特殊方法创建类:

实例化:



new 方法 是自动执行并先于init执行




call 来创建 new
反射:
示例:

实现: 但是这样不行,所以需要用反射实现

正确方法:
1 通过 判断有没有这个方法:

用反射实现:
调用

如果没有就没有,报错,所以需要提前加一个判断

来真正调用: 加上()

真正正常使用:

来定义一个:



实践:
1 class Dog(object): 2 def __init__(self,name): 3 self.name = name 4 def eat(self): 5 print("{_who} is eat food".format(_who=self.name)) 6 d1 = Dog("dang") 7 print(d1.name) 8 chose = input("input:>>").strip() 9 #判断实例里是否有此方法或者属性 10 # if hasattr(d1,chose): 11 # print("hava",chose) 12 # else: 13 # print("not have",chose) 14 #如果有这个方法执行这个方法(属性的话直接使用,不能执行) 15 if hasattr(d1,chose): 16 func = getattr(d1,chose) 17 func() 18 else: 19 print("not have", chose) 20 # #改变实例中的属性 21 # if hasattr(d1,chose): 22 # setattr(d1,chose,"heheh") 23 # else: 24 # print("not have",chose) 25 # 26 #删除实例中的属性 27 if hasattr(d1,chose): 28 delattr(d1,chose) 29 else: 30 print("not have",chose) 31 print(d1.name)
hasattr 判断实例中是否有此属性或方法

getattr 获取属性 或 者执行方法

setattr 改变属性(变量)

delattr 删除属性

可以 判断 有就取出来,没有就设置然后出去来

异常处理:
使用 as 获取错误结果:

处理多个异常:



用在最后面抓所有未知错误:


finally 不管有没有错都执行

常见的几种异常:

自定义错误:

触发自己写的异常:


Socket 网络编程


协议类型:

套接字类型

示例:
client:
1 import socket 2 client = socket.socket() 3 client.connect(('localhost',6868)) 4 client.send(b"Hello world!") 5 data = client.recv(1024) 6 print('recv:',data) 7 client.close()

server:
1 import socket 2 server = socket.socket() 3 server.bind(('localhost',6868)) #绑定要监听的地址 4 server.listen() #开始监听 5 print('我要开始等电话了') 6 conn,addr = server.accept() #等待电话打过来,接收客户端地址 7 print(conn,addr) 8 print('电话来了') 9 data = conn.recv(1024) 10 print('recv:',data) 11 conn.send(data.upper()) 12 server.close()

所有数据传输必须用byte 格式

循环接收一个客户端

改进 循环接收多个客户端而不推出

最大允许多个连接,在一个通讯时,可以有几个等待的 在排队的 一般写5个 不到10个

不能send 空 必须做一个判断 如果是空就不发

