python-day7-静态方法、类方法、属性方法、特殊成员方法、反射、异常处理、socket

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

@

    属性

        实例变量

        类变量

        私有属性__var

    方法

       构造方法,

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

       私有方法

继承

扫描二维码关注公众号,回复: 3052222 查看本文章

继承

组合

@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

猜你喜欢

转载自www.cnblogs.com/AKmendo/p/9585626.html