专栏首页散尽浮华Python-面向对像及其他

Python-面向对像及其他

其他相关

1、isinstance(obj,cls)

      检查是否obj是类cls的对象

# 针对变量 n = 123
s 
= "123" print isinstance(n,int) # True print isinstance(s,int) # False print isinstance(s,str) # False
#
针对类 class Foo: pass
obj 
= Foo() print isinstance(obj,Foo) # True

2、issubclass(sub,super)

      检查sub类是否是super类的派生类

class
Foo: pass class Fun(Foo): pass print issubclass(Fun,Foo) # True

3、异常处理

1:模式: try:  # 正常的代码  pass  except Exception,e:      # 异常后显示的内容  pass

e是包含在Exception类中的一个对象,其中包含所有的报错的情况

实例:

while
True: num1 = raw_input('num1:') num2 = raw_input('num2:') try: num1 = int(num1) num2 = int(num2) result = num1 +num2 except Exception,e: print "报错信息如下显示:" print e '''
打印结果:
num1:3
num2:f
报错信息如下显示:
invalid literal for int() with base 10: 'f'
'''

如果对程序的要求没有特殊的异常处理可以直接使用总的Exception,如果单独处理某种错误,可以按照下面的方法操作

try

: li = [11,22,33,44] li[110] except IndexError,e: print e

这样就只对索引的错误进行异常处理。

2:异常的种类

异常的种类有很多,每个异常专门用于处理某一项异常。

1 2 3 4 5 6 7 8 9 10 11 12 13

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

异常其他结构

try

: # 主代码块 pass except KeyError,e: # 异常时,执行该块 pass else: # 主代码块执行完执行该块 pass finally: # 无论是否异常,最终执行该块

pass

主动触发异常

try:
    N = raw_input("请输入1:")
    if N == 1:
        print "成功"
    else:
         raise Exception('我这里出错了。。。')
except Exception,e:
    print "显示错误页面。。。。"
    print e

打印结果:
请输入1:2
显示错误页面。。。。
我这里出错了。。。

自定义触发异常

1 2 3 4 5 6 7 8 9 10 11 12 13

class Alexerror(Exception):     def __init__(self,msg=None):         self.message = msg     def __str__(self):         if self.message:             return self.message         else:             return 'Alex Error' try:     #raise Alexerror('报错了报错了')     raise Alexerror() except Exception,e:     print e

当类Alexerror加上括号执行的时候,是执行类中的构造函数__init__

Exception函数在返回的时候,是将__str__中的字符串返回出来。

如果使用Alexerror来执行的话,就返回Alex Error,在括号中加入内容的话,就返回其中的内容。

4、反射

普通方式实现:

首先在主程序中实现:

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17

import home print "oldboy 框架" url = raw_input("请输入URL:") if url == "home/func1":     ret = home.func1()     print ret elif url == "home/func1":     ret = home.func1()     print ret elif url == "home/func1":     ret = home.func1()     print ret elif url == "home/func1":     ret = home.func1()     print ret else:     print "页面404错误"

调用的页面程序

1 2 3 4 5 6 7 8 9 10

#!/usr/bin/env python # coding:utf-8 def func1():     return "result func1" def func2():     return "result func2" def func3():     return "result func3" def func4():     return "result func4"

实现结果

1 2 3 4 5 6

oldboy 框架 请输入URL:rtew 页面404错误 oldboy 框架 请输入URL:home/func1 result func1

部分反射

1 2 3 4 5 6 7 8 9 10 11 12

import home print "oldboy 框架" url = raw_input("请输入URL:") controller,action = url.split('/') func = getattr(home,action) ret = func() print ret   打印结果: oldboy 框架 请输入URL:home/func1 result func1

action = 字符串

getattr:去某个容器模块中找函数,字符串函数名,如果有则获取函数。

以字符串的形式执行某一个模块中的函数

反射功能由以下四个内置函数提供:

hasattr  getattr  setattr   delattr  这四个函数分别用于对对象内部执行:检查是否含有某个成员、获取成员、设置成员、删除成员。

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59

# 操作内存中某个容器中的元素 # getattr setattr delattr hasattr   # 找到home文件将内容加载到内存 import home # 列出home中的所有内容 print dir(home) print hasattr(home,'func1') print hasattr(home,'2231241')   print getattr(home,'func2')   setattr(home,'alex',lambda x:x+1) print dir(home)   delattr(home,'func3') print dir(home)     class foo:     static_name = 'cgt'     def __init__(self):         self.name = 'cgt'       def show(self):         pass     @staticmethod     def static_show():         pass       @classmethod     def class_show(cls):         pass     print foo.__dict__.keys()   print hasattr(foo,'show')   obj = foo() print obj.__dict__ # 查看对象obj中有没有name元素, print hasattr(obj,'name') print hasattr(obj,'show')       打印结果: ['__builtins__', '__doc__', '__file__', '__name__', '__package__', 'func1', 'func2', 'func3', 'func4'] True False <function func2 at 0x021878F0> ['__builtins__', '__doc__', '__file__', '__name__', '__package__', 'alex', 'func1', 'func2', 'func3', 'func4'] ['__builtins__', '__doc__', '__file__', '__name__', '__package__', 'alex', 'func1', 'func2', 'func4'] ['static_show', '__module__', 'show', 'static_name', 'class_show', '__doc__', '__init__'] True {'name': 'cgt'} True True

设计模式

1、单例,顾名思义单个实例。

比如在游戏的场景中,就无法使用单例模式,要不你怎么创建那么多角色。

实际应用:

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33

#!/usr/bin/env python # coding:utf-8 class SqlHelper:     __static_instance = None       def __init__(self):         pass       @classmethod     def instance(cls):         if cls.__static_instance:             return cls.__static_instance         else:             cls.__static_instance = SqlHelper()             return cls.__static_instance       def fetch(self):         pass       def remove(self):         pass     def get_user():     obj = SqlHelper.instance()     obj.fetch()     print id(obj)     return '1'   def del_user():     obj = SqlHelper.instance()     obj.remove()     return '1'

借助web来实现

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32

#!/usr/bin/env python # -*- coding:utf-8 -*- from wsgiref.simple_server import make_server   def RunServer(environ, start_response):     start_response('200 OK', [('Content-Type', 'text/html')])     url = environ['PATH_INFO']     # 对URL以/进行分割,     # http://localhost:8001/func3     # temp = func3     filename = url.split('/')[1]     mothodname = url.split('/')[2]     # import home     module = __import__(filename)         # 去home中检查,是否含有指定的函数     is_exist = hasattr(module, mothodname)     if is_exist:         # 获取函数         func = getattr(module, mothodname)         # 执行t函数,并获取返回值         ret = func()         # 将函数返回值相应给请求者         return ret     else:         return '404 not found'   if __name__ == '__main__':     httpd = make_server('', 8001, RunServer)     print "Serving HTTP on port 8001..."     httpd.serve_forever()

简单举例:

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21

class SqlHelper:     __static_instance = None       def __init__(self):         self.hostname = '0.0.0.0'         self.port = 3306       @classmethod     def instance(cls):         if cls.__static_instance:             return cls.__static_instance         else:             cls.__static_instance = SqlHelper()             return cls.__static_instance       obj1 = SqlHelper.instance() print id(obj1) obj2 = SqlHelper.instance() print id(obj2)

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • python基础随笔

    一: 作用域 对于变量的作用域,只要内存中存在,该变量就可以使用。 二:三元运算 name = 值1 if 条件 else 值2 如果条件为真:result =...

    洗尽了浮华
  • python常用知识梳理

    接触python已有一段时间了,下面针对python基础知识的使用做一完整梳理: 1)避免‘\n’等特殊字符的两种方式: a)利用转义字符‘\’ ...

    洗尽了浮华
  • ELK批量删除索引及集群相关操作记录-运维笔记

    线上部署了ELK+Redis日志分析平台环境, 随着各类日志数据源源不断的收集, 发现过了一段时间之后, ELK查看会原来越慢, 重启elasticsearch...

    洗尽了浮华
  • vmware centos7 克隆

    记录一下vmware如何克隆一个虚拟机,并解决克隆的centos7虚拟机遇到的网络问题

    董可伦
  • Python学习记录-多进程和多线程

    狭义定义:进程是正在运行的程序的实例(an instance of a computer program that is being executed)。 广义...

    py3study
  • 视频动画 | 什么是快速排序?

    上一篇文章介绍了 冒泡排序和它的优化 。这次介绍的快速排序是冒泡排序演变而来的算法,比冒泡排序要高效的很多。

    我脱下短袖
  • Data Science | Numpy基础(二)

    按照上篇文章,相信大家都安装好了Anaconda,有朋友在留言区留言希望出一篇关于Anaconda的使用教程,其实Anaconda的基本使用非常简单,基本无需教...

    咸鱼学Python
  • 五种绕过 Linux 命令别名的方法

    我们可以使用 alias 命令定义或显示 bash shell 别名。一旦创建了 Bash shell 别名,它们将优先于外部或内部命令。本文将展示如何暂时绕过...

    Debian社区
  • 常用shell命令

    用户2936342
  • Windows 技巧篇-鼠标指针安装方法,漂亮的鼠标指针推荐

    4.安装过的指针包就存在电脑里了,可以随时进行切换。只需要在个性化里就可以切换了。

    小蓝枣

扫码关注云+社区

领取腾讯云代金券