代码改变世界

python零基础学习第七天知识

2018-02-04 14:39  龙武大帝  阅读(165)  评论(0编辑  收藏  举报
静态方法:
与类无关,不能访问类里面的任何属性和方法
类方法:
只能访问类变量
属性@property
把一个方法变成一个静态属性
flight.status
@status.setter
flight.status = 3
@status.delter
反射
getattr(obj,str)
hasattr(obj,str)
setattr(obj,str,val) #val可以是一个变量也可以是一个属性
delattr(obj,str)
 
动态加载类:
# 第一种方法:
lib = __import__("lib.aa")
print(lib) # <module 'lib' from '/Users/chuck/Desktop/OneOaaS/python/s17/day7/lib/__init__.py'>
# 这个就相当于找到了lib,但是并没有找到
print(lib.aa) # <module 'lib.aa' from '/Users/chuck/Desktop/OneOaaS/python/s17/day7/lib/aa.py'>
# 这个才是真正的找到的了lib.aa
print(lib.aa.C().name) # chuck
# 然后调用这个lib.aa.C().name才是真正的调用C这个类,并且能够访问里面的属性
 
# 第二种方法:(官方建议使用这个,上面的容易弄混淆)
import importlib
aa = importlib.import_module("lib.aa")
print(aa) # <module 'lib.aa' from '/Users/chuck/Desktop/OneOaaS/python/s17/day7/lib/aa.py'>
# 这个才是真正的找到了aa这个模块
print(aa.C().name) # chuck
# 然后直接调用这个aa.C就可以了
 
特殊成员函数:
__new__ #优先于__init__方法调用
__call__ #
class Foo(object):
def __call__()
print('call')
 
Foo()() #执行call方法
__metaclass__ # 用来定义这个类以怎么的形式被创建
 
异常处理:
try
...
except (ValueError,KeyError),e #2.0上使用
except (ValueError,KeyError) as e #3.0使用
except Exception as e:放在异常处理最后面,这个用于判断未知错误
 
else: #正确了才执行
...
finaly: #不管怎样都执行
...
raise ValueError # 触发自己的异常
 
断言:
assert type(aa.name) is str #如果是str则可以正常执行,如果不是则报错,这个比if...else....简单
print('ddd')
 
socket:
tcp/ip #这个是对tcp、ip的封装
暴露的就是send, recv的方式
 
famliy_address
AF.INET ipv4
AF.INET6 ipv6
AF.UNIT #local
socket protocal type
 
服务端server:
 
sock.SOCK_STREAM tcp/ip (默认)
sock.SOCK_DGRAM for udp
server = socket.socket(AF_INET,sock.SOCK_STREAM) #地址簇
server.bind((address,port))
server.listen()
while True: #不断的接收新链接
conn,addr = server.accept() # 阻塞
while True: #不断的接收数据
print("new conn ",addr)
data = conn.recv(1024) #这个1024是接收的大小,官方建议是8192 # recv默认是阻塞的
if not data:
break # 客户端一断开,conn.recv收到的就是空数据
print(data)
conn.send(data.upper())

 

客户端client:
 
client = socket.socket() #实例化客户端
client.connect(serverip,9999) #serverip 和端口
client.send(data) #发送数据,也可以发送几个数据
client.send(data)
client.recv(data)