码迷,mamicode.com
首页 > 编程语言 > 详细

Python 手记 - 8

时间:2015-12-18 14:56:02      阅读:175      评论:0      收藏:0      [点我收藏+]

标签:反射   python异常   socket编程   

面向对象扩展

1、isinstance(obj, cls), issubclass(sub, super)示例

    class A(object):

    

        def a(self):

            print "A"

    

    

    class B(A):  #B继承A

    

        def b(self):

            print "B"

    

    t = B()

    print isinstance(t, A)  #判断t是否为A的实例对象

    print isinstance(t, B)  #判断t是否为B的实例对象

    print issubclass(B, A)  #判断B是否为A的派生类

    

2、异常处理


  异常的完整结构

    try:

    pass  #主代码块在这里执行

    except:

    pass  #出现异常时,执行此处语句

    else:

    pass  #主代码块执行完毕之后,执行此处语句

    finally:

    pass  #不管是否有异常,最终都会输出结果

    

   自定义异常

    """__str__方法"""

    class MyError(Exception):

    

        def __init__(self, msg):

            self.message = msg

    

        def __str__(self):

            return self.message

    

    try:

         #"http error"是传入的message信息,产生异常时会调用__str__方法,并返回传入的          # http error

        raise MyError("http error")

    except Exception, e:

        print e

    


3、反射

    """第一种方法:反射(针对海量页面,根据URL的不同返回不同的页面)"""

    print "Welcome, My Web"

    url = raw_input("http://")

    controller, action = url.split("/")

    func = getattr(home, action)

    ret = func()

    print ret

    

    """第二种方法,匹配每个不同的URL,返回不同的页面"""

    print "Welcome, My Web"

    url = raw_input("http://")

    if url == "home/home":

        print home.home()

    elif url == "home/page":

        print home.page()

    elif url == "home/row":

        print home.row()

    else:

        print "wrong url"

    

    getattr, setattr, hasattr, delattr

    print dir(home)

    print hasattr(home, "home")

    setattr(home, "liyang", "gentle men")

    print dir(home)

    delattr(home, "liyang")

    delattr(home, "row")

    print dir(home)

    

    

    结果:

    [‘__author__‘, ‘__builtins__‘, ‘__doc__‘, ‘__file__‘, ‘__name__‘, ‘__package__‘, ‘home‘, ‘page‘, ‘row‘]

    True

    [‘__author__‘, ‘__builtins__‘, ‘__doc__‘, ‘__file__‘, ‘__name__‘, ‘__package__‘, ‘home‘, ‘liyang‘, ‘page‘, ‘row‘]

    [‘__author__‘, ‘__builtins__‘, ‘__doc__‘, ‘__file__‘, ‘__name__‘, ‘__package__‘, ‘home‘, ‘page‘]

    

    

    

    

    

    """反射三,动态导入模块"""

    controller, action = raw_input("http://").split("/")

    #将模块以字符串的形式导入,输入home/home,得到返回值home

    module = __import__(controller)

    func = getattr(module, action)

    ret = func()

    print ret

        

    

    结果:

    http://home/home

    home

    

4、Socket编程

    """socket-server"""

    def main():

        # 创建socket对象

        sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM, 0)

        # 监听端口, 地址以元组的形式表现

        sock.bind((‘127.0.0.1‘, 8001))

        # 开始监听,5表示队列中可以保存的,未被服务器端所处理的连接

        sock.listen(5)

     

        while True:

            # 阻塞,deng 。。。。

            # 直到有请求连接

            print ‘....‘

            connection, address = sock.accept()

            # connection,代表客户端socket对象,

            # address,客户端IP地址

            #handle_request(connection)

          #接受客户端传来的信息

            buf = connection.recv(1024)

            print buf

            connection.send("HTTP/1.1 200 OK\r\n\r\n")

            connection.send("Hello, World")

            connection.close()

     

    if __name__ == ‘__main__‘:

      main()

    

    """"socket-client:"""

    import socket

    __author__ = ‘LiYang‘

    

    #创建socket对象

    obj_client = socket.socket()

    #客户端连接服务器端的地址

    obj_client.connect(("localhost", 8021))

    #客户端向服务器端发送的数据

    obj_client.send("client")

    #客户端接受服务器端的返回值,并输出

    server_data = obj_client.recv(1024)

    print server_data

    #关闭客户端连接

    obj_client.close()

    

Python 手记 - 8

标签:反射   python异常   socket编程   

原文地址:http://seiya.blog.51cto.com/7515007/1725981

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!