一、面向对象高级语法部分
 
1、静态方法、类方法、属性方法                                                                         
a 静态方法名字上归类管,实际上在静态方法里访问不了类或实例中的任意属性       
静态方法.py
 #!/usr/bin/env python
#Author is wspikh
# -*- coding: encoding -*-

#静态方法
class Dog(object):
    def __init__(self,name):
        self.name = name

@staticmethod #把eat方法变为静态方法,1 调用时主动传实例本身到eat 2 去掉eat()方法中的self参数
    def eat():  #例子中取的是第二种方法
        print("chenronghua  is eating")

d = Dog("chenronghua")
#d.eat(d)也是可行的,但是eat方法中要传self参数
d.eat()

                                       
 b 类方法只能访问类变量,不能访问实例变量。    
类方法.py
#!/usr/bin/env python
#Author is wspikh
# -*- coding: encoding -*-
#类方法
#类方法只能访问类变量,不能访问实例变量
class Dog(object):
    name = "我是类变量!"
    def __init__(self,name):
         self.name = name

@classmethod #注意缩进,要和上边的构造函数保持一致
    def eat(self):
        print("%s is eating" % self.name)

d = Dog("chenronghua")
d.eat()

                                                         
 c 属性方法就是通过@property把一个方法变成一个静态属性
 #!/usr/bin/env python
#Author is wspikh
# -*- coding: encoding -*-
class Dog(object):
    name = 'alex'
    def __init__(self,name):
        self.name = name
    @property #加上此方法,可以把下边的方法看成Dog类的一个属性,一次装饰有效
    def eat(self):
        print("%s is eating" %self.name)
    @classmethod #类方法
    def drink(self):
        print("%s is drinking" %self.name)
    @staticmethod
    def full(self):
        print("%s is full up" %self.name)

d = Dog("chenronghua")
#调用属性方法下的eat属性
d.eat
#调用类方法下的drink方法
d.drink()
#调用静态方法下的eat方法

d.full(d)
 
  flight.py
#!/usr/bin/env python
#Author is wspikh
# -*- coding: encoding -*-
#对属性方法进行练习
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):
        #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 fight 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("CA980")
f.checking_status()
f.flight_status = 1 #触发flight_status.setter
del f.flight_status #触发flight_status.deleter
                                                             
 2、类的特殊成员方法                                                                            
a __doc__
#__doc__表示类的描述信息,对于类下的方法是无效的。
class film(object):
    """谍影重重5已经上映了,非常不错"""
    def __init__(self,name):
        self.name = name
    def func(self):
        """这个功能还没定义,只是占个位子"""
        print("it's about %s" %self.name)

print(film.__doc__)
t = film('spy')

t.func()
 
b __module__和 __class__ ,前者表示当前操作的对象在那个模块,后者表示当前操作的对象的类是什么 
c __init__ 构造方法,通过类创建对象时,自动触发执行
e __del__析构方法,当对象在内存中被释放时,自动触发执行
f __call__对象后面加括号,触发执行
class Foo:
    def __init__(self):
        pass

def __call__(self, name,*args, **kwargs):
        self.name = name

        print('This is __call__方法:%s' %self.name)
obj = Foo()  # 执行 __init__
obj('www.we.com')  # 执行 __call__
 
g __dict__
#__dict__查看类或对象中的所有成员
class Province:
    country = 'China'

def __init__(self, name, count):
        self.name = name
        self.count = count

def func(self, *args, **kwargs):

        print('func')
# 获取类的成员,即:静态字段、方法、
print(Province.__dict__)
# 输出:{'country': 'China', '__module__': '__main__', 'func': <function func at 0x10be30f50>, '__init__': <function __init__ at 0x10be30ed8>, '__doc__': None}
obj1 = Province('HeBei', 10000)
print(obj1.__dict__)
# 获取 对象obj1 的成员
# 输出:{'count': 10000, 'name': 'HeBei'}
obj2 = Province('HeNan', 3888)
print(obj2.__dict__)
# 获取 对象obj1 的成员
# 输出:{'count': 3888, 'name': 'HeNan'} 
 
h __str__
#__str__表示如果类中定义了此方法,那么在打印对象的时候,默认输出该方法的返回值
class Foo:
    def __str__(self):
        return '这是要返回的值!'

obj = Foo()
print(obj)
# 输出:这是要返回的值

 
i __getitem__ __setittm__ __delitem__
#!/usr/bin/env python
#Author is wspikh
# -*- coding: encoding -*-

class Foo(object):
    def __getitem__(self,key):
        print('__getitem__',key)

def __setitem__(self,key,value):
        print('__setitem__',key,value)

def __delitem__(self,key):
        print('___delitem__',key)

obj = Foo()

result = obj['k1']
obj['k2'] = 'alex'

del obj['k1']
 
j __new__\ __metaclass__
(略)
 
k  动态导入模块
import importlib
 
__import__('import_lib.metaclass'#这是解释器自己内部用的
#importlib.import_module('import_lib.metaclass') #与上面这句效果一样,官方建议用这个
 
l 反射
#!/usr/bin/env python
#Author is wspikh
# -*- coding: encoding -*-
#hasattr 和 getattr都是内建函数
class A:
def __init__(self):
self.name = 'zhangjing'
#self.age = 24 def method(self):
print("method print") Instance = A()
print(getattr(Instance,'name','not find')) #如果Instance对象中有属性
#name则打印self.name的值,否则就打印'not find
print(getattr(Instance,'age','not find')) #如果Instance对象中有属性age则打印self.age的值,否则打印'not find'
print(getattr(A,'method','default')) #如果有方法method,就打印其地址,否则打印default
#print(getattr(A,'method','default'))() #如果有方法method,运行函数并打印None否则打印default #hasattr getattr setattr练习
class Employee:
'所有员工的基类'
empCount = 0 def __init__(self, name, salary):
self.name = name
self.salary = salary
#加1
Employee.empCount += 1 def displayCount(self):
print("Total Employee %d" % Employee.empCount) def displayEmployee(self):
print("Name : ", self.name, "\nSalary: ", self.salary) Xiaoxiao = Employee('Xiaoxiao', 2000)
setattr(Xiaoxiao, 'age', 21) Tiny = Employee("Tiny", 5000)
setattr(Tiny, 'age', 23) print("实例类的第一个对象 Xiaoxiao ");
print('Xiaoxiao 是否存在age属性:', hasattr(Xiaoxiao, 'age'))
Xiaoxiao.displayEmployee();
print("Age:", getattr(Xiaoxiao, 'age', 'not find'));
#对象中是否有SEX属性,有就返回值,没有就返回not find
print("Sex:", getattr(Xiaoxiao, 'sex', 'not find'));
print("\n") print("实例类的第二个对象 Tiny")
print('Tiny 是否存在age属性:', hasattr(Tiny, 'age'))
Tiny.displayEmployee()
print("Age: ", getattr(Tiny, 'age', 'not find')); print("\n")
print("Total Employee number: %d" % Employee.empCount)
print("\n")
总结:                                                                      
   1 hasattr(object,name_str) 判断一个对象里是否有对应的字符串的方法                                      
   2 getattr(),根据字符串去获取obj对象里的对应的XX方法、                                                 
   3 setattr()                                                                         
   4 dela ttr()                                                                        
 
 3、异常处理(异常是Python对象,表示一个错误)   
   try的工作原理是,当开始一个try语句后,python就在当前程序的上下文中作标记,这样当异常出现时就可以回到这里,try子句先执行,接下来会发生什么依赖于执行时是否出现异常。try子句中的代码块放置可能出现异常的语句,except子句中的代码块处理异常
如果当try后的语句执行时发生异常,python就跳回到try并执行第一个匹配该异常的except子句,异常处理完毕,控制流就通过整个try语句(除非在处理异常时又引发新的异常)。
  • 如果在try后的语句里发生了异常,却没有匹配的except子句,异常将被递交到上层的try,或者到程序的最上层(这样将结束程序,并打印缺省的出错信息)。
  • 如果在try子句执行时没有发生异常,python将执行else语句后的语句(如果有else的话),然后控制流通过整个try语句
异常处理.py
 #!/usr/bin/env python
#Author is wspikh
# -*- coding: encoding -*-
"""import sys,traceback
try:
    a = 1
    b = a
    c = w
except Exception as e:
    print(Exception,":",e)

try:
    a = b
    b = c
except:
    f = open('log.txt','a')
    traceback.print_exc(file=f)
    f.flush()
    f.close()
"""
try:
    fh = open('testfile','w')

    fh.write("这是一个测试文件,用于测试异常!")
except IOError:  #捕获IO异常
    #testfile的权限已经变了,所以会报错
    print("Error: 没有找到文件或读取文件失败")
else:
    print("内容写入文件成功")
    fh.close()
 
#使用raise抛出异常
#当程序出现错误,python会自动引发异常,也可以通过raise显示地引发异常。一旦执行了raise语句,raise后面的语句将不能执行。
#演示raise用法
try:
     s = None
     if s is None:
         print "s 是空对象"
         raise NameError     #如果引发NameError异常,后面的代码将不能执行
     print(len(s))
except TypeError:
     print "空对象没有长度"
 
#自定义异常
#python允许程序员自定义异常,用于描述python中没有涉及的异常情况,自定义异常必须继承Exception类,自定义异常按照命名规范##以"Error"结尾,显示地告诉程序员这是异常。自定义异常使用raise语句引发,而且只能通过人工方式触发。
from __future__ import division
 
class DivisionException(Exception):
      def __init__(self, x, y):
            Exception.__init__ (self, x, y)       #调用基类的__init__进行初始化
            self.x = x
            self.y = y
 
if __name__ == "__main__":
      try:
            x = 3
            y = 2
      if x % y > 0:                               #如果大于0, 则不能被初始化,抛出异常
            print x/y
            raise DivisionException(x, y)
except DivisionException,div:                     #div 表示DivisionException的实例对象
      print "DivisionExcetion: x/y = %.2f" % (div.x/div.y)
 

二、Socket开发基础                                                                          
 1 协议类型就是地址簇                                                                           
 
 2 客户端                                                                                 
 import socket                                                                         
 client =socket.socket()                                                               
 client.connect((‘localhost’,6969))                                                    
 #client.send(b“hello world”)                                                          
 #支持中文                                                                                 
 #client.send(“我要下载A”.encode('utf-8’))                                                 
 while True:                                                                           
    msg = input(“>>>”).trip()                                                          
     client.send(msg.encode('utf-8’))                                                  
    data = client.recv(1024)                                                           
    print(“recv:”,data)                                                                
 client.close()                                                                        
 
 3 服务器                                                                                 
 import socket                                                                         
 server - socket.socket                                                                
 server.bind((‘localhost’,6969))                                                       
 server.listen(5) #监听5个                                                                
 print(“我要开始等电话了“)                                                                     
 conn,addR = server.accept() #等信息接入                                                    
  #conn就是客户端连过来而在服务器端为其生成的一个实例                                                         
   print(conn,addR)                                                                    
   print(”电话来了“)                                                                       
 while True:                                                                           
   data = conn.recv(1024)                                                              
   print(“recv:”,data)                                                                 
   conn.send(data.upper())                                                             
 server.close()                                                                        
 

Python的平凡之路(7)的更多相关文章

  1. Python的平凡之路(8)

    (本文是对平凡之路(7)的补充等) 一.动态导入模块 import importlib __import__('import_lib.metaclass') #这是解释器自己内部用的 #importl ...

  2. Python的平凡之路(20)

    (提问复习为主) 一.Django请求的生命周期      武彦涛:           路由系统 -> 视图函数(获取模板+数据=>渲染) -> 字符串返回给用户     二.路由 ...

  3. Python的平凡之路(19)

    一.Django请求生命周期   对于所有的web框架来说本质就是一个socket服务端,浏览器是socket客户端                                          ...

  4. Python的平凡之路(18)

    一.JS 正则部分 test   - 判断字符串是否符合规定的正则rep = /\d+/;rep.test("asdfoiklfasdf89asdfasdf")# truerep ...

  5. Python的平凡之路(16)

    一.HTML+CSS补充 0.常用页面布局 <!DOCTYPE html> <html lang="en"><head> <meta ch ...

  6. Python的平凡之路(13)

    一.Python的paramiko模块介绍 Python 的paramiko模块,该模块和SSH用于连接远程服务器并执行相关操作 SSH client 用于连接远程服务器并执行基本命令 基于用户名和密 ...

  7. Python的平凡之路(12)

    一.数据库介绍 数据库(Database)是按照数据结构来组织.存储和管理数据的仓库,每个数据库都有一个或多个不同的API用于创建,访问,管理,搜索和复制所保存的数据.我们也可以将数据存储在文件中,但 ...

  8. Python的平凡之路(11)

    一. rabbitmq 1 进程Queue:  父进程与子进程进行交互,或者同属于同一父进程下多个子进程进行交互 2 队列通信:   send1.py #!/usr/bin/env python#Au ...

  9. Python的平凡之路(10)

    异步IO 数据库 队列 缓存 1.Gevent协程 定义:用户态的轻量级线程.协程拥有自己的寄存器上下文和栈.协程调度切换时,将寄存器上下文和栈保存到其他地方,在切回来的时候,恢复先前保存的寄存器上下 ...

  10. Python的平凡之路(9)

    一.Paramiko模块练习 1. Paramiko模块介绍 Paramiko是用python语言写的一个模块,遵循SSH2协议,支持以加密和认证的方式,进行远程服务器的连接   2 .SSHclie ...

随机推荐

  1. [转]MySQL5.6新特性之Multi-Range Read

    这几天看到mrr的东西,刚好看到以前我们组的一个小伙的博客,我看挺全的,就转过来了,原博客地址请戳 一 介绍    MySQL 5.6版本提供了很多性能优化的特性,其中之一就是 Multi-Range ...

  2. Linux 奇技淫巧

    为了整理这些命令,花了我一个晚上的时间,但是不弄明白,我就是不爽啊. 1.cmatrix 命令 黑客帝国,就是酷炫,先按F11全屏效果更佳 安装:luffy@ubuntu:~$ sudo apt-ge ...

  3. Python学习笔记-常用模块

    1.python模块 如果你退出 Python 解释器并重新进入,你做的任何定义(变量和方法)都会丢失.因此,如果你想要编写一些更大的程序,为准备解释器输入使用一个文本编辑器会更好,并以那个文件替代作 ...

  4. JAVA线程锁-读写锁应用,简单的缓存系统

    在JAVA1.5版本以后,JAVA API中提供了ReadWriteLock,此类是一个接口,在它的实现类中ReentrantReadWriteLock中有这样一段代码 class CachedDat ...

  5. [问题2015S07] 复旦高等代数 II(14级)每周一题(第八教学周)

    [问题2015S07]  设 \(A\) 为 \(n\) 阶复方阵, 证明: 存在 \(n\) 阶非异复对称阵 \(S\), 使得 \(A'=S^{-1}AS\), 即 \(A\) 可通过非异复对称阵 ...

  6. [问题2014A10] 解答

    [问题2014A10]  解答 考虑如下变形: \[(I_n-A)^2=(AA'-A)(I_n-A)=A(A'-I_n)(I_n-A)=-A(I_n-A)'(I_n-A).\] 因为 \(A\) 是非 ...

  7. CentOS7 运行级别

    linux运行的级别7个级别运行级别的查看使用 runlevelrunlevelN 3 //运行在3级别,可以理解成命令行级别级别之间的切换需要使用init x 0 //关机3 //多用户的命令行级别 ...

  8. LINQ中的一些查询语句格式

    LINQ的基本格式如下所示:var <变量> = from <项目> in <数据源> where <表达式> orderby <表达式> ...

  9. 第四章· ucos系统及其任务

    来自为知笔记(Wiz)

  10. CSS3中的2D转换

    通过 CSS3 转换,我们能够对元素进行移动.缩放.转动.拉长或拉伸. 转换是使元素改变形状.尺寸和位置的一种效果. 注:Internet Explorer 10.Firefox 以及 Opera 支 ...