Python基础知识学习_Day8

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了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()

  套接字的文件描述符

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

 

以上是关于Python基础知识学习_Day8的主要内容,如果未能解决你的问题,请参考以下文章

python基础学习日志day8-socket上传文件

坚持Selenium+Python学习记录 DAY8

python基础学习日志day8-异常处理

Python之路,day8-Python基础

Python基础篇-day8

python day8 学习整理