zoukankan      html  css  js  c++  java
  • python之路七

    静态方法

    通过@staticmethod装饰器即可把其装饰的方法变为一个静态方法,什么是静态方法呢?其实不难理解,普通的方法,可以在实例化后直接调用,并且在方法里可以通过self.调用实例变量或类变量,但静态方法是不可以访问实例变量或类变量的,一个不能访问实例变量和类变量的方法,其实相当于跟类本身已经没什么关系了,它与类唯一的关联就是需要通过类名来调用这个方法

    class Dog(object):
     
        def __init__(self,name):
            self.name = name
     
        @staticmethod #把eat方法变为静态方法
        def eat(self):
            print("%s is eating" % self.name)
     
     
     
    d = Dog("ChenRonghua")
    d.eat()

    上面的调用会出以下错误,说是eat需要一个self参数,但调用时却没有传递,没错,当eat变成静态方法后,再通过实例调用时就不会自动把实例本身当作一个参数传给self了。

    <span style="color: #ff0000;">Traceback (most recent call last):
      File "/Users/jieli/PycharmProjects/python基础/自动化day7面向对象高级/静态方法.py", line 17, in <module>
        d.eat()
    TypeError: eat() missing 1 required positional argument: 'self'
    </span>

    想让上面的代码可以正常工作有两种办法

    1. 调用时主动传递实例本身给eat方法,即d.eat(d)

    2. 在eat方法中去掉self参数,但这也意味着,在eat中不能通过self.调用实例中的其它变量了

     1 class Dog(object):
     2
     3     def __init__(self,name):
     4         self.name = name
     5
     6     @staticmethod
     7     def eat():
     8         print(" is eating")
     9
    10
    11
    12 d = Dog("ChenRonghua")
    13 d.eat()

    Python 异常处理

    python提供了两个非常重要的功能来处理python程序在运行中出现的异常和错误。你可以使用该功能来调试python程序。

     python标准异常
    异常名称    描述
    BaseException    所有异常的基类
    SystemExit    解释器请求退出
    KeyboardInterrupt    用户中断执行(通常是输入^C)
    Exception    常规错误的基类
    StopIteration     迭代器没有更多的值
    GeneratorExit     生成器(generator)发生异常来通知退出
    StandardError    所有的内建标准异常的基类
    ArithmeticError     所有数值计算错误的基类
    FloatingPointError     浮点计算错误
    OverflowError    数值运算超出最大限制
    ZeroDivisionError    除(或取模)零 (所有数据类型)
    AssertionError    断言语句失败
    AttributeError    对象没有这个属性
    EOFError     没有内建输入,到达EOF 标记
    EnvironmentError     操作系统错误的基类
    IOError     输入/输出操作失败
    OSError     操作系统错误
    WindowsError    系统调用失败
    ImportError     导入模块/对象失败
    LookupError     无效数据查询的基类
    IndexError    序列中没有此索引(index)
    KeyError    映射中没有这个键
    MemoryError    内存溢出错误(对于Python 解释器不是致命的)
    NameError    未声明/初始化对象 (没有属性)
    UnboundLocalError     访问未初始化的本地变量
    ReferenceError    弱引用(Weak reference)试图访问已经垃圾回收了的对象
    RuntimeError     一般的运行时错误
    NotImplementedError    尚未实现的方法
    SyntaxError    Python 语法错误
    IndentationError    缩进错误
    TabError    Tab 和空格混用
    SystemError     一般的解释器系统错误
    TypeError    对类型无效的操作
    ValueError     传入无效的参数
    UnicodeError     Unicode 相关的错误
    UnicodeDecodeError     Unicode 解码时的错误
    UnicodeEncodeError     Unicode 编码时错误
    UnicodeTranslateError    Unicode 转换时错误
    Warning     警告的基类
    DeprecationWarning    关于被弃用的特征的警告
    FutureWarning     关于构造将来语义会有改变的警告
    OverflowWarning    旧的关于自动提升为长整型(long)的警告
    PendingDeprecationWarning    关于特性将会被废弃的警告
    RuntimeWarning     可疑的运行时行为(runtime behavior)的警告
    SyntaxWarning    可疑的语法的警告
    UserWarning    用户代码生成的警告

    什么是异常?

    异常即是一个事件,该事件会在程序执行过程中发生,影响了程序的正常执行。

    一般情况下,在Python无法正常处理程序时就会发生一个异常。

    异常是Python对象,表示一个错误。

    当Python脚本发生异常时我们需要捕获处理它,否则程序会终止执行。

    异常处理

    捕捉异常可以使用try/except语句。

    try/except语句用来检测try语句块中的错误,从而让except语句捕获异常信息并处理。

    如果你不想在异常发生时结束你的程序,只需在try里捕获它。

    Socket 编程

    socket通常也称作"套接字",用于描述IP地址和端口,是一个通信链的句柄,应用程序通常通过"套接字"向网络发出请求或者应答网络请求。

    socket起源于Unix,而Unix/Linux基本哲学之一就是“一切皆文件”,对于文件用【打开】【读写】【关闭】模式来操作。 socket就是该模式的一个实现,socket即是一种特殊的文件,一些socket函数就是对其进行的操作(读/写IO、打开、关闭)

    socket和file的区别:

        file模块是针对某个指定文件进行【打开】【读写】【关闭】
        socket模块是针对 服务器端 和 客户端Socket 进行【打开】【读写】【关闭】

    service 端:

    #!/usr/bin/env python
    # -*- coding:utf-8 -*-

    import socket

    ip_port = ('127.0.0.1',9999)

    sk = socket.socket()
    sk.bind(ip_port)
    sk.listen(5)

    while True:
        print 'server waiting...'
        conn,addr = sk.accept()

        client_data = conn.recv(1024)
        print client_data
        conn.sendall('不要回答,不要回答,不要回答')

        conn.close()

    client端:

    #!/usr/bin/env python
    # -*- coding:utf-8 -*-
    import socket
    ip_port = ('127.0.0.1',9999)

    sk = socket.socket()
    sk.connect(ip_port)

    sk.sendall('请求占领地球')

    server_reply = sk.recv(1024)
    print server_reply

    sk.close()

  • 相关阅读:
    群发邮件2
    谈谈C#中的三个关键词new , virtual , override
    一个简单的jQuery插件ajaxfileupload实现ajax上传文件例子
    网站静态化结构
    第四十七章 天神的邀请
    asp.net 异步群发邮件时遭遇到的问题 ddddddddd
    第四十章 远方的消息
    商用群发p2p网络
    第四十八章 三大客卿
    第四十五章 你没让我失望
  • 原文地址:https://www.cnblogs.com/hexinzhao/p/5855162.html
Copyright © 2011-2022 走看看