07_静态方法,socket

staticmethod classmethod property方法

举个静态方法的栗子:

class Dog(object):
    def __init__(self,name):
        self.name=name
   
    @staticmethod   #实际上跟类没什么关系了,只是类下面的一个函数,名义上属于这个类
    def eat(self):
        print("%s is eating %s"%(self.name,"KFC"))
 
d=Dog("Alex")
d.eat(d)

Tips:实际场景中使用较少,理解为:相当于类的工具包。

 
静态方法只是名义上归类管理,实际上在静态方法里访问不了类或实例中的任何属性。
 

类方法(classmethod):

只能访问类变量,不能访问实例变量
栗子:
@classmethod
def eat(self):
    print("%s is eating %s"%(self.name,"KFC"))

 

属性方法(property):

把一个方法变成一个静态属性。
class Animal(object):
    def __init__(self,name):
        self.name=name
        self.__food=None

    @property
    def eat(self):
        print("%s is eating %s"%(self.name,self.__food))

    @eat.setter
    def eat(self,food):    #传属性
        print("Set to eat:",food)
        self.__food=food

    @eat.deleter
    def eat(self):        #删除属性
        del self.__food
        print("Have been deleted!!!")

a=Animal("Alex")
a.eat
a.eat="KFC"
a.eat

 

应用:
class Flight(object):
    def __init__(self,name):
        self.flight_name=name
   
    def checking_status(self):
        print("checking flight %s status"%self.flight_name)
        return 1
   
    @property
    def flight_status(self):
        status=self.checking_status()
        if status==0:
            print("flight got canceled...")
        elif status==1:
            print("flight is arrived...")
        elif status==2:
            print("flight has departured already...")
        else:
            print("cannot confirm the flight status...,please check later")
   
    @flight_status.setter #修改
    def flight_status(self,status):
        status_dic={
            0:"canceled",
            1:"arrived",
            2:"departured"
        }
        print("\033[31;1mHas changed the flight status to \033[0m",status_dic.get(status))
   
    @flight_status.deleter  #删除
    def flight_status(self):
        print("status got removed...")
 
f=Flight("CA8910")
f.flight_status
f.flight_status=2

 


 

类的特殊成员方法:

1.__doc__ #描述类的信息
 
2.__module__ #表示当前操作的对象在哪个模块
__class__ #表示当前操作的对象的类是什么
 
3.__init__ #构造方法,通过类创建对象时,自动触发执行。
 
 
4.__del__ #析构方法,当对象在内存中被释放时,自动触发执行
 
 
5.__call__ #对象后面加括号,触发执行
 
 
6.__dict__ #查看类或对象中的所有成员
 
 
7.__str__ #如果一个类中定义了__str__方法,那么在打印对象时,默认输出该方法的返回值
 
 
8.__getitem__,__setitem__,__delitem__
#用于索引操作,如字典,以上分别表示获取,设置,删除数据
 
9.__new__ \ __metaclass__

 

  

反射:

通过字符串映射或修改程序运行时的状态、属性、方法:
等于实现了动态的内存装配
  getattr(object,name)
根据字符串去获取obj对象里的对应的方法的内存地址
  hasattr(object,name)
判断一个obj对象里是否有对应的name字符串的方法
  setattr(x,y,v)
  is equivalent to 'x.y=v'
  delattr(x,y)

删除方法

 
举个栗子:
# -*- coding:utf-8 -*-
# Author:Zhan Chen
 
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....%s"%(self.name,food))
 
d=Dog("Alex")
choice=input(">>:").strip()
 
if hasattr(d,choice):
    func = getattr(d,choice)
    func("kfc")
else:
    # setattr(d,choice,bulk)
    # d.bulk(d)
    setattr(d,choice,None)

 

异常处理

 
data={}
names=['alex','jack']
 
try:
    names[3]
    data['name']
except KeyError as e:
    print("没有找个key",e)
except IndexError as e:
    print("列表操作错误",e)

 

抓住所有错误:

data={}
names=['alex','jack']
 
try:
    names[3]
    data['name']
except Exception as e:
    print("天啦噜,出错了",e)

 

Socket通信

 
  OSI七层模型
 
  TCP/IP(安全的数据发送)
  三次握手/四次断开
  UDP(不安全的数据发送)
 
  简单的例子
#服务端
import socket
#声明类型
server=socket.socket()
#绑定需要监听的端口
server.bind(('localhost',6969))
#监听
server.listen()
print("等待接入。。。")
#等待接入,conn就是客户端连过来而在服务器端为其生成的一个连接实例
conn,addr=server.accept()
print("有接入数据。。。")
data=conn.recv(1024)
print("recv:",data)
#返回
conn.send(data.upper())
#关闭
server.close()
#客户端
import socket
#声明socket类型,同时生成socket连接对象
client=socket.socket()
#连接
client.connect(('localhost',6969))
#发送数据
client.send(b"hello world")
#接收返回
data=client.recv(1024)
print("recv:",data)
#关闭连接
client.close()

 

 
 
 
 

posted @ 2018-06-05 17:26  丶藏锋  阅读(230)  评论(0编辑  收藏  举报