Python基础知识学习_Day8

一、类的扩展方法

1.静态方法

语法:@staticmethod,静态方法不能访问公有属性,不能访问类。可在实例化后直接调用,并且在方法里可以通过self.调用实例变量或类变量。

1 class eat(object):
2     def __init__(self,name):
3         self.name = name
4     @staticmethod #静态方法不能访问共有属性、不能访问实例
5     def eat(name,food):
6         print("%s is eating..%s" %(name,food))
7 p.eat("alex","food")

2.类方法

语法:@classmethod,只能访问类的公有属性,不能访问实例属性。

 1 class Dog(object):
 2     name = "我是类变量"
 3     def __init__(self,name):
 4         self.name = name
 5
 6     @classmethod
 7     def eat(self):
 8         print("%s is eating" % self.name)
 9
10
11
12 d = Dog("ChenRonghua")
13 d.eat()
14
15
16 #执行结果
17
18 我是类变量 is eating

3.属性方法

语法:@property 把一个方法变成静态属性

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

属性方法之航班查询代码

 1 class Flight(object):
 2     def __init__(self,name):
 3         self.flight_name = name
 4
 5
 6     def checking_status(self):
 7         print("checking flight %s status " % self.flight_name)
 8         return  1
 9
10
11     @property
12     def flight_status(self):
13         status = self.checking_status()
14         if status == 0 :
15             print("flight got canceled...")
16         elif status == 1 :
17             print("flight is arrived...")
18         elif status == 2:
19             print("flight has departured already...")
20         else:
21             print("cannot confirm the flight status...,please check later")
22
23     @flight_status.setter #修改
24     def flight_status(self,status):
25         status_dic = {
26 : "canceled",
27 :"arrived",
28 : "departured"
29         }
30         print("\033[31;1mHas changed the flight status to \033[0m",status_dic.get(status) )
31
32     @flight_status.deleter  #删除
33     def flight_status(self):
34         print("status got removed...")
35
36 f = Flight("CA980")
37 f.flight_status
38 f.flight_status =  2 #触发@flight_status.setter
39 del f.flight_status #触发@flight_status.deleter

4.抽象类

 1 class Alert(object):
 2     def send(self):
 3         raise NotImplementedError
 4 class MailAlert(Alert):
 5     def send(self,msg):
 6         print("---sending..",msg)
 7 class SMSAlert(Alert):
 8     pass
 9 m = MailAlert()
10 m.send("df")

二.类的特殊成员方法

1.__doc__ 表示类的描述信息

2.__module__表示当前操作的对象在哪个模块

3.__class__ 表示当前操作的对象的类是什么

class C:

    def __init__(self):
        self.name = ‘wupeiqi‘

from lib.aa import C

obj = C()
print obj.__module__  # 输出 lib.aa,即:输出模块
print obj.__class__      # 输出 lib.aa.C,即:输出类

4.__init__构造方法,通过类创建对象时,自动触发执行。

5.__del__ 析构方法,当对象在内存中被释放时,自动触发执行。此方法一般无需定义,python是一门高级语言,程序员在使用时无需关心内存的分配和释放,此工作都是交给python解释器来执行,所以,析构函数的调用是有解释器在进行垃圾回收时自动触发执行的。

6.__call__ 对象后面加括号,触发执行。

7.__dict__查看类或对象中所有的成员

三.反射

通过字符串映射或修改程序运行的状态、属性、方法。

python中的反射功能是由以下四个内置函数提供:hasattr、getattr、setattr、delattr,改四个函数分别用于对对象内部执行:检查是否含有某成员、获取成员、设置成员、删除成员。

待完善。。。。。。。

四.异常处理

在编程过程中为了增加友好性,在程序出现bug时一般不会将错误信息显示给用户,而是现实一个提示的页面,通俗来说就是不让用户看见大黄页!!!

常见种类:

 1 AttributeError 试图访问一个对象没有的树形,比如foo.x,但是foo没有属性x
 2 IOError 输入/输出异常;基本上是无法打开文件
 3 ImportError 无法引入模块或包;基本上是路径问题或名称错误
 4 IndentationError 语法错误(的子类) ;代码没有正确对齐
 5 IndexError 下标索引超出序列边界,比如当x只有三个元素,却试图访问x[5]
 6 KeyError 试图访问字典里不存在的键
 7 KeyboardInterrupt Ctrl+C被按下
 8 NameError 使用一个还未被赋予对象的变量
 9 SyntaxError Python代码非法,代码不能编译(个人认为这是语法错误,写错了)
10 TypeError 传入对象类型与要求的不符合
11 UnboundLocalError 试图访问一个还未被设置的局部变量,基本上是由于另有一个同名的全局变量,
12 导致你以为正在访问它
13 ValueError 传入一个调用者不期望的值,即使值的类型是正确的

常见种类

 1 try:
 2     int(‘add‘)
 3     li = [11,22]
 4     li[100]
 5 except IndexError as e:  #符合的情况下执行
 6     print("1",e)
 7 except ValueError as e:  #符合的情况下执行
 8     print("2",e)
 9 except Exception as e:  #都能匹配到,以上不满足的情况下,匹配该项。
10     print("3",e)
11 else:
12     print("else")
13 finally:
14     print("finally")  #最后肯定会执行

五.socket编程

socket本质上就是在2台网络互通的电脑之间,架设一个通道,两台电脑通过这个通道来实现数据的互相传递。

socket Families 地址簇:socket.AF_INET    #IPV4

socket.SOCK_STREAM    #for tcp

socket.SOCK_DGRAM     #for udp

socket.SOCK_RAM         #原始套接字

socket方法:

socket.socket(family=AF_INETtype=SOCK_STREAMproto=0fileno=None)

sk.bind(address)  将套接字绑定到地址

sk.listen(backlog)  #开始监听传入连接。backlog指定在拒绝连接之前,可以挂起的最大连接数量。

sk.setblocking(bool)

  是否阻塞(默认True),如果设置False,那么accept和recv时一旦无数据,则报错。

sk.accept()

  接受连接并返回(conn,address),其中conn是新的套接字对象,可以用来接收和发送数据。address是连接客户端的地址。

  接收TCP 客户的连接(阻塞式)等待连接的到来

sk.connect(address)

  连接到address处的套接字。一般,address的格式为元组(hostname,port),如果连接出错,返回socket.error错误。

sk.connect_ex(address)

  同上,只不过会有返回值,连接成功时返回 0 ,连接失败时候返回编码,例如:10061

sk.close()

  关闭套接字

sk.recv(bufsize[,flag])

  接受套接字的数据。数据以字符串形式返回,bufsize指定最多可以接收的数量。flag提供有关消息的其他信息,通常可以忽略。

sk.recvfrom(bufsize[.flag])

  与recv()类似,但返回值是(data,address)。其中data是包含接收数据的字符串,address是发送数据的套接字地址。

sk.send(string[,flag])

  将string中的数据发送到连接的套接字。返回值是要发送的字节数量,该数量可能小于string的字节大小。即:可能未将指定内容全部发送。

sk.sendall(string[,flag])

  将string中的数据发送到连接的套接字,但在返回之前会尝试发送所有数据。成功返回None,失败则抛出异常。

内部通过递归调用send,将所有内容发送出去。

sk.sendto(string[,flag],address)

  将数据发送到套接字,address是形式为(ipaddr,port)的元组,指定远程地址。返回值是发送的字节数。该函数主要用于UDP协议。

sk.settimeout(timeout)

  设置套接字操作的超时期,timeout是一个浮点数,单位是秒。值为None表示没有超时期。一般,超时期应该在刚创建套接字时设置,因为它们可能用于连接的操作(如 client 连接最多等待5s )

sk.getpeername()

  返回连接套接字的远程地址。返回值通常是元组(ipaddr,port)。

sk.getsockname()

  返回套接字自己的地址。通常是一个元组(ipaddr,port)

sk.fileno()

  套接字的文件描述符

最终代码,待完善.........

时间: 2024-08-08 03:59:35

Python基础知识学习_Day8的相关文章

python基础知识学习

基础数据类型 int整型 >>> 1111 1111 >>> type(1111) <type 'int'> >>> str字符串 字符串是不可修改的 >>> a = 'a' >>> type(a) <type 'str'> 去空格 >>> a = ' hello,world' >>> a.strip() 'hello,world' >>>

python基础知识学习笔记

字符编码 #!/usr/bin/env python # -*- coding:utf-8 -*- 注释: 单行注释: # 注释内容 多行注释: '''   注释内容        ''' 用户输入信息的保存并输出 3.X user_input = input("your name:") print("user name:",user_input) 2.X user_input = raw_input("your name:")print(&qu

Python基础知识学习第四天

语句和表达式 代码格式:PEP8 缩进4个空格 一行不超过79个字符 一.语句 1.赋值语句:例如:s = 'Python' 2.元组/列表赋值 3.序列赋值 序列赋值,当变量与字符不匹配的时候会报错.这个时候就需要用到贪婪匹配 [*b]前面加个星. 二.表达式 1.函数调用语句: 例如,在 math 模块中有个开平方的函数.导入后调用就叫做函数调用 2.方法调用 3.字面值 4.print(‘hello’) if条件语句 通过一条或多条语句的执行结果(True或者False)来决定执行的代码块

python基础知识的学习和理解

参考链接:https://github.com/yanhualei/about_python/tree/master/python_learning/python_base python基础知识笔记 Flask aiohttp的学习和理解 assert() asyncio的学习和理解 continue_break学习和理解 cprofile代码效率分析 datatime dict字典学习与理解 django_project eval() filter() gevent协程的学习和理解 http服

Bash编程基础知识学习第一节

Bash编程基础知识学习 一.bash的由来 1 .什么是Bash 什么是Shell Bash 是GNU Bourne-Again SHell,是目前大多数Linux发行版采用的Shell. Shell 是*nix提供给用户使用的界面.一个操作系统的底层是独立运行的, 用户界面和底层分开,可以最大限度的保证系统稳定.Shell就是一个特殊的程序,负责接受用户的命令,并把系统的响应返回给用户. Bash Shell 一般不需要自己安装,在安装发行版的同时都会安装好. Shell的存在是和登陆相关的

Python基础知识梳理 - 第01部分

在开始Python基础知识梳理前, 先安装下环境. 以下过程是在Linux操作系统, root用户下进行的, 主要安装了2.7版本的python, 和pip, ipython, virtualenv等工具, 最后是vim的设置. 1. 安装python. # wget https://www.python.org/ftp/python/2.7.14/Python-2.7.14.tgz Python-2.7.14 # ./configure --prefix=/usr/local/python27

Python基础知识梳理 - 第02部分

本文是Python基础知识的第二篇, 主要是对内置对象类型的介绍, 涉及的类型如下表. 数字类型 在Python中, 数字并不是一个真正的对象类型, 而是一组类似类型的分类, 如整数和浮点数, 复数等. Python还提供了若干处理数字对象的工具, 如内置数学函数pow, abs等, 标准库math, random等. 看下数字的简单使用. In [15]: 123 + 234 Out[15]: 357 In [16]: 1.5 * 4 Out[16]: 6.0 In [32]: pow(2,

Python基础知识思维导图|自学Python指南

微信公众号[软件测试大本营]回复"python",获取50本python精华电子书. 测试/开发知识干货,互联网职场,程序员成长崛起,终身学习. 现在最火的编程语言是什么?答案就是Python. 人生苦短,我用Python Python的特点: Python一直是位于编程语言排行榜的前三位, Python遵循"简单.优雅.明确"的设计哲学,语法简单易懂,而且Python的中文文档也于2019年3月份发布,各种开发环境也越来越简单. Python免费开源. Pytho

python基础知识 01 python模块

Python基础知识 (1)python模块(2)如何声明python变量(3)进制转换(4)格式化数字(5)单行注释和多行注释(6)单引号和双引号字符串(7)拼接字符串(8)长字符串 第一课:python模块 python模块 = 封装了API的library 我们先不讲如何定义模块 ,我们先讲如何引用模块 模块分为2类 1.python自身提供的模块 2.自定义模块 //这两种方法呢,我们引用的方式是一样的 引用模块的关键字为import 这个和Java的引用方式是一样的,但是 有很大的区别