AKmendo

  博客园  :: 首页  :: 新随笔  ::  :: 订阅 订阅  :: 管理

@特殊方法、异常处理、反射、socket

@

    属性

        实例变量

        类变量

        私有属性__var

    方法

       构造方法,

       析构函数(python自带,不写也有,写了相当与重构)

       私有方法

继承

继承

组合

@7.2继承及组合!!

@属性方法(高级方法,不用也能干活):把一个方法变成一个静态属性,不能用括号,不可以赋值。

@property #attribute

def eat(self):

d.eat

@如果想赋值,在上述函数下加:

@eat.setter

    def eat(self,food):

        print("set to food:",food)

self.__food = food

@删除

普通属性:del d.__food

静态属性:

 @eat.deleter

    def eat(self):

        del self.__food

@http://www.cnblogs.com/alex3714/articles/5213184.html

航班、类的特殊成员

@基类是type类的一个实例。

@ 创建实例时,__new__ 函数出发__init__,默认就有,可以创建覆盖,一般不用。

@反射(重要,测试一下)

def bulk(self):

    print("%s is yelling...." %self.name)

class Dog(object):

    def __init__(self,name):

        self.name = name

    def eat(self,food):

        print("%s is eating..."%self.name,food)

d = Dog("NiuHanYang")

choice = input(">>:").strip()

if hasattr(d,choice):

getattr(d,choice)()#判断有这个函数名,执行函数

else:

    setattr(d,choice,bulk) #d.talk = bulk,将外面的函数装到实例中

    func = getattr(d, choice)

func(d)

删除:delattr(d,choice)

@异常处理

except xxxError as e:

print(e)

except Exception as e:#所有错抓,可以先except一个错误,然后再继续抓所有错误。

以上都可打印出错误名称,但是遇到缩进等问题还是会报错,此时只用except

@常见异常,只看常用的http://www.cnblogs.com/wupeiqi/articles/5017742.html(这是py2版本)

@自定义异常:

class AlexError(Exception):

    def __init__(self, msg):

        self.message = msg

try:

    raise AlexError('数据库连不上')

except AlexError as e:

print(e)

@@@socket

@ip-port相当于总机,一共65535个;端口相当于分机;

@http://www.cnblogs.com/alex3714/articles/5227251.html

 

@地址簇:TCP/IP的更底层,即网络层

 

socket.AF_UNIX unix没有网卡,本机进程间通信 

 

socket.AF_INET IPV4 

 

socket.AF_INET6  IPV6

 

@洪水攻击,超多并发冲击网站,我们的网站一般也就几万并发能力,超过后会拒绝访问。

 

A发起对B的请求,B返回但是A因为是伪造的ip所以接收不到,B就会等待A的反馈几十秒,从而挂起链接。A不停的发起伪造地址头的请求,B会激增链接挂起量。

 

@@@socket通信案例

 

@#客户端

 

import socket

 

client = socket.socket() #声明socket类型,同时生成socket连接对象

 

client.connect(('localhost',6969))#?,端口

 

while True:

 

    msg = input(">>:").strip()

 

    if len(msg) == 0:continue

 

    client.send(msg.encode("utf-8"))#只能接受ascc码的byte类型数据,不能send

 

    data = client.recv(10240)

 

    print("recv:",data.decode())

 

client.close()

 

@服务器端

 

import socket

 

server = socket.socket()

 

server.bind(('localhost',6969)) #绑定要监听端口

 

server.listen(5) #监听,最大挂起排队数

 

print("我要开始等电话了")

 

while True:

 

    conn, addr = server.accept()  # 等电话打进来(链接的标记位,地址)

 

    # conn就是客户端连过来而在服务器端为其生成的一个连接实例

 

    print(conn, addr)

 

    print("电话来了")

 

    count = 0

 

    while True:

 

        data = conn.recv(1024)#1024b,不能用server.recv(1204)来接收

 

        print("recv:",data)

 

        if not data:

 

            print("client has lost...")

 

            break

 

        conn.send(data.upper())

 

        count+=1

 

        if count >10:break

 

server.close()

@@@看到

7-13-31

 

posted on 2018-09-04 17:12  Akmendo  阅读(160)  评论(0编辑  收藏  举报