python——面向对象相关

其他相关

一、isinstance(obj, cls)

 检查是否obj是否是类 cls 的对象

1
2
3
4
5
6
class Foo(object):
    pass
obj = Foo()
isinstance(obj, Foo)

二、issubclass(sub, super)

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

1
2
3
4
5
6
7
class Foo(object):
    pass
class Bar(Foo):
    pass
issubclass(Bar, Foo)

三、异常处理

1、异常基础

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

1
2
3
4
try:
    pass
except Exception,ex:
    pass

需求:将用户输入的两个数字相加

while True:num1 = raw_input('num1:')num2 = raw_input('num2:')try:num1 = int(num1)num2 = int(num2)result = num1 + num2except Exception, e:print '出现异常,信息如下:'print e
View Code

2、异常种类

python中的异常种类非常多,每个异常专门用于处理某一项异常!!!

AttributeError 试图访问一个对象没有的树形,比如foo.x,但是foo没有属性x
IOError 输入/输出异常;基本上是无法打开文件
ImportError 无法引入模块或包;基本上是路径问题或名称错误
IndentationError 语法错误(的子类) ;代码没有正确对齐
IndexError 下标索引超出序列边界,比如当x只有三个元素,却试图访问x[5]
KeyError 试图访问字典里不存在的键
KeyboardInterrupt Ctrl+C被按下
NameError 使用一个还未被赋予对象的变量
SyntaxError Python代码非法,代码不能编译(个人认为这是语法错误,写错了)
TypeError 传入对象类型与要求的不符合
UnboundLocalError 试图访问一个还未被设置的局部变量,基本上是由于另有一个同名的全局变量,
导致你以为正在访问它
ValueError 传入一个调用者不期望的值,即使值的类型是正确的
常用异常
ArithmeticError
AssertionError
AttributeError
BaseException
BufferError
BytesWarning
DeprecationWarning
EnvironmentError
EOFError
Exception
FloatingPointError
FutureWarning
GeneratorExit
ImportError
ImportWarning
IndentationError
IndexError
IOError
KeyboardInterrupt
KeyError
LookupError
MemoryError
NameError
NotImplementedError
OSError
OverflowError
PendingDeprecationWarning
ReferenceError
RuntimeError
RuntimeWarning
StandardError
StopIteration
SyntaxError
SyntaxWarning
SystemError
SystemExit
TabError
TypeError
UnboundLocalError
UnicodeDecodeError
UnicodeEncodeError
UnicodeError
UnicodeTranslateError
UnicodeWarning
UserWarning
ValueError
Warning
ZeroDivisionError
更多异常
dic = ["wupeiqi", 'alex']
try:dic[10]
except IndexError, e:print e
实例:IndexError
dic = {'k1':'v1'}
try:dic['k20']
except KeyError, e:print e
实例:KeyError
s1 = 'hello'
try:int(s1)
except ValueError, e:print e
ValueError

对于上述实例,异常类只能用来处理指定的异常情况,如果非指定异常则无法处理。

1
2
3
4
5
6
7
# 未捕获到异常,程序直接报错
s1 = 'hello'
try:
    int(s1)
except IndexError,e:
    print e

所以,写程序时需要考虑到try代码块中可能出现的任意异常,可以这样写:

1
2
3
4
5
6
7
8
9
s1 = 'hello'
try:
    int(s1)
except IndexError,e:
    print e
except KeyError,e:
    print e
except ValueError,e:
    print e

万能异常 在python的异常中,有一个万能异常:Exception,他可以捕获任意异常,即:

1
2
3
4
5
s1 = 'hello'
try:
    int(s1)
except Exception,e:
    print e

接下来你可能要问了,既然有这个万能异常,其他异常是不是就可以忽略了!

答:当然不是,对于特殊处理或提醒的异常需要先定义,最后定义Exception来确保程序正常运行。

1
2
3
4
5
6
7
8
9
s1 = 'hello'
try:
    int(s1)
except KeyError,e:
    print '键错误'
except IndexError,e:
    print '索引错误'
except Exception, e:
    print '错误'

3、异常其他结构

1
2
3
4
5
6
7
8
9
10
11
12
try:
    # 主代码块
    pass
except KeyError,e:
    # 异常时,执行该块
    pass
else:
    # 主代码块执行完,执行该块
    pass
finally:
    # 无论异常与否,最终执行该块
    pass

4、主动触发异常

1
2
3
4
try:
    raise Exception('错误了。。。')
except Exception,e:
    print e

5、自定义异常

1
2
3
4
5
6
7
8
9
10
11
12
class WupeiqiException(Exception):
    def __init__(self, msg):
        self.message = msg
    def __str__(self):
        return self.message
try:
    raise WupeiqiException('我的异常')
except WupeiqiException,e:
    print e

6、断言

1
2
3
4
5
# assert 条件
assert 1 == 1
assert 1 == 2

四、反射

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

class Foo(object):def __init__(self):self.name = 'wupeiqi'def func(self):return 'func'obj = Foo()# #### 检查是否含有成员 ####
hasattr(obj, 'name')
hasattr(obj, 'func')# #### 获取成员 ####
getattr(obj, 'name')
getattr(obj, 'func')# #### 设置成员 ####
setattr(obj, 'age', 18)
setattr(obj, 'show', lambda num: num + 1)# #### 删除成员 ####
delattr(obj, 'name')
delattr(obj, 'func')

详细解析:

当我们要访问一个对象的成员时,应该是这样操作:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
class Foo(object):
    def __init__(self):
        self.name = 'alex'
    def func(self):
        return 'func'
obj = Foo()
# 访问字段
obj.name
# 执行方法
obj.func()
  
那么问题来了?
a、上述访问对象成员的 name 和 func 是什么? 
答:是变量名
b、obj.xxx 是什么意思? 
答:obj.xxx 表示去obj中或类中寻找变量名 xxx,并获取对应内存地址中的内容。
c、需求:请使用其他方式获取obj对象中的name变量指向内存中的值 “alex”
class Foo(object):def __init__(self):self.name = 'alex'# 不允许使用 obj.name
obj = Foo()
class Foo(object):def __init__(self):self.name = 'alex'def func(self):return 'func'# 不允许使用 obj.name
obj = Foo()print obj.__dict__['name']
方式一
class Foo(object):def __init__(self):self.name = 'alex'def func(self):return 'func'# 不允许使用 obj.name
obj = Foo()print getattr(obj, 'name')
方式二

d、比较三种访问方式

  • obj.name
  • obj.__dict__['name']
  • getattr(obj, 'name')

答:第一种和其他种比,...
      第二种和第三种比,...

#!/usr/bin/env python
#coding:utf-8
from wsgiref.simple_server import make_serverclass Handler(object):def index(self):return 'index'def news(self):return 'news'def RunServer(environ, start_response):start_response('200 OK', [('Content-Type', 'text/html')])url = environ['PATH_INFO']temp = url.split('/')[1]obj = Handler()is_exist = hasattr(obj, temp)if is_exist:func = getattr(obj, temp)ret = func()return retelse:return '404 not found'if __name__ == '__main__':httpd = make_server('', 8001, RunServer)print "Serving HTTP on port 8000..."httpd.serve_forever()
Web框架实例

结论:反射是通过字符串的形式操作对象相关的成员。一切事物都是对象!!!

#!/usr/bin/env python
# -*- coding:utf-8 -*-import sysdef s1():print 's1'def s2():print 's2'this_module = sys.modules[__name__]hasattr(this_module, 's1')
getattr(this_module, 's2')
反射当前模块成员

类也是对象

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
class Foo(object):
    staticField = "old boy"
    def __init__(self):
        self.name = 'wupeiqi'
    def func(self):
        return 'func'
    @staticmethod
    def bar():
        return 'bar'
print getattr(Foo, 'staticField')
print getattr(Foo, 'func')
print getattr(Foo, 'bar')

模块也是对象

#!/usr/bin/env python
# -*- coding:utf-8 -*-def dev():return 'dev'
home.py
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
#!/usr/bin/env python
# -*- coding:utf-8 -*-
"""
程序目录:
    home.py
    index.py
当前文件:
    index.py
"""
import home as obj
#obj.dev()
func = getattr(obj, 'dev')
func() 

拓展:

  import 模块 (反射实现):

  a = __import__("模块名")

  a = __import__('lib.test.com', fromlist=True)

转载于:https://www.cnblogs.com/LiCheng-/p/6444948.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/489012.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

德国工业4.0眼里“工业互联网”与“智能制造”

来源:智造智库工业4.0在德国被认为是第四次工业革命,主要是指,在“智能工厂”利用“智能备”将“智能物料”生产成为“智能产品”,整个过程贯穿以“网络协同”,从而提升生产效率,缩短生产周期,降…

python常用模块教程_盘点Python常用的模块和包

模块1.定义计算机在开发过程中,代码越写越多,也就越难以维护,所以为了编写可维护的代码,我们会把函数进行分组,放在不同的文件里。在python里,一个.py文件就是一个模块。2.优点:提高代码的可维护…

php 正则匹配静态资源,Struts2 配置静态资源文件不经过Strut处理(正则匹配)

Struts2框架有两个核心配置文件:struts.xml和Struts2默认属性文件default.properties(在struts2-core-2.3.20.jar中)default.properties可以通过自己在classpath下写一个struts.properties文件进行定制改写为什么是struts.properties,这可以看org.apache…

全球数字孪生市场大预测:2025 年的 358 亿美元,年复合增长率(CAGR)高达 37.8%...

来源:云头条 数字孪生市场估计将从2019年的38亿美元猛增到2025年的358亿美元,年复合增长率(CAGR)高达37.8%。推动数字孪生需求增长的几个因素包括:越来越广泛地采用物联网和云计算之类的技术用于实施数字孪生&#xff…

matlab 小波中心频率,小波频域特性Matlab实现.pdf

小波频域特性Matlab实现小波频域特性– Matlab实现东北大学信号与信息处理研究所栾峰 副教授/luanfeng/luanfeng编程示例例下面给出了一个信号的连续小波变换的例子。这个信号的第一个时间段包含了一个低频成分,最后一个时间段包含了高频成分,中间的时间…

yii3正式版什么时候发布_事业单位联考结束,成绩什么时候发布?合格分数线怎么算?...

今天上午,2020下半年全国事业单位联考笔试结束了。笔试刚刚结束,很多考生问图图有没有此次联考的答案,那肯定得有啊。为了帮助各位考生更好估分,华图教育推出估分系统,各位考生只需点击文末“了解更多”即可参与估分。…

Open Live Writer测试

************************我是可爱的分界线***************************转载于:https://www.cnblogs.com/elijahxb/p/6473105.html

德勤全球智慧城市2.0报告!中国占了世界一半

来源:德勤全球智慧城市新发展全球城市化的进程依然以不可阻挡的趋势向前推进, 到2050年, 接近70%的世界人口将生活在城市。人口大国中国和印度所在的亚洲将成为全球城市化最快的地区。在城市急速扩张的过程中, 先进的技术将帮助城…

python神经网络作用_Python · 神经网络(三*)· 网络

(这里是最终成品的 GitHub 地址)(这里是本章用到的 GitHub 地址)推荐先修章节:Python 神经网络(二*) 层Python 神经网络(三) 网络由于分形这个东西是在 tensorflow 的基础上实现的且相当麻烦、所以我就没在我自己的结构里面实现分形。因此,我自己实现的…

大公司里怎样开发和部署前端代码

作者:张云龙链接:https://www.zhihu.com/question/20790576/answer/32602154来源:知乎著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。没人邀请,看到这个问题不错,路过怒答。&#x…

5G产业发展最新进展深度解析(144页PPT)

来源:吴东升本报告对不同区域(全球、美国、中国、日本、欧洲等)的5G产业发展做了深入、全面的分析;对5G产业链和生态链以及主要产业应用状况做了系统盘点分析;对5G技术进展、投资环境和投资机会等也做了详细梳理。是5G…

php layui table,Layui table组件相关介绍

出现的问题:1、使用 Layui 官方提供的 【转换静态表格】 方式初始化加载时报 id 找不到的错误(自己的锅)2、传递参数问题使用的 table 加载刷新方案有一个页面,左侧是一个 tree,右侧是一个 table,默认 table 加载全数据&#xff0…

python中setpos_如何用类初始化Python中的多个turtle

only one turtle shown on screen. Two are defined in the code below.the turtles heading and coordinates arent being initialized.我相信问题是你定义了一次随机的位置和方向,在海龟创造循环之外,所以它们都从同一个地方开始,以相同的速…

存内计算能否成为下一代AI芯片的关键

来源:半导体行业观察随着人工智能的落地和大规模应用,AI芯片也成为了常见的芯片品类。AI芯片相比传统芯片来说,主要的竞争优势就在于高算力和高能效比。高算力是指能够比传统芯片更快地完成AI计算,而高能效比则是指能比传统芯片用…

[转载]sql server 分布式查询

--用openrowset连接远程SQL或插入数据 --如果只是临时访问,可以直接用openrowset--查询示例select * from openrowset(SQLOLEDB,sql服务器名;用户名;密码,数据库名.dbo.表名)在跨库查询时需要启用Ad Hoc Distributed Queries启用Ad Hoc Distributed Queries:exec sp…

python中复选框取消修改_python – 如何在PySide / PyQt中设置“只读复选框”

我迟到了 – 看起来你有一个有效的解决方案.为了将来参考,您可以采用的另一种方式是使用鼠标事件 – 这可以保持所有信号的工作方式:from PyQt4 import QtGui, QtCoreclass MyCheckBox(QtGui.QCheckBox):def __init__( self, *args ):super(MyCheckBox, self).__ini…

matlab画半透明矩形,使用matlab画半透明椭圆

先上最终效果图:本来是想直接用scatter和alpha来画的,结果在尝试以下代码后,发现无法显示透明效果scatter(rand(1000,1),rand(1000,1), ‘filled‘);alpha(0.5)具体原因可以参考stackoverflow(http://stackoverflow.com/questions/6366404/se…

2019全球信息通信业热点回顾

来源: 人民邮电报编辑:于莉莉 监制:郭川时光飞逝,倏忽一年。回首2019年,全球电信业最大的热点当属5G。这一年,5G在经过数年酝酿后终于商用,无论是运营商还是政府,都对5G给予了空前的…

SSIS添加分区-动态

主要参考:动态分区 一、前提准备: 1、一个日期存储过程,注意代码可以得到一个月中的最后一天,最终生成时间维度。 USE [DrugDW] GO /****** Object: StoredProcedure [dbo].[PROC_DATETIME] Script Date: 2/28 星期二 14:16:4…

canvas 实现图片局部模糊_小技巧!H5使用Html2Canvas实现自动截屏(下)

上文写到使用html2Canvas实现截屏。上次留了一个问题,如果当前dom元素对象比较大,比如包含一个比较大的图片等,在将dom序列化成字符串时,极易导致字符串超长。对于超长的内容,后台程序将获取不到参数,那么怎…