类的特殊成员反射异常处理

类的特殊成员

1.__doc__表示类的描述信息

class Foo(object):""" 描述类信息,这是用于看片的神奇 """def func(self):passprint(Foo.__doc__)
#输出:描述类信息,这是用于看片的神奇

2.__module__和 class

module 表示当前操作的对象在那个模块

class 表示当前操作的对象的类是什么

class C():def __init__(self):self.name = 'wupeiqi'
from lib.aa import Cobj = C()
print(obj.__module__)  # 输出lib.aa,即:输出模块print(obj.__class__)      # 输出 lib.aa.C,即:输出类

3.__init__构造方法,通过类创建对象时,自动触发执行

4.__del__
析构方法,当对象在内存中被释放时,自动触发执行

5.__call__
对象后面加括号,触发执行。

class Foo(object):def __init__(self):print("i am init")def __call__(self, *args, **kwargs):print("i am call")
obj=Foo()  #执行__init__
obj()      #执行__call__
#输出:i am call

6.__dict__ 查看类或对象中的所有成员

class Province(object):country = 'China'def __init__(self, name, count):self.name = nameself.count = countdef 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'}

7.__str__ 当需要转化为字符串时执行该函数
如果一个类中定义了__str__方法,那么在打印对象时,默认输出该方法的返回值。

class Foo:def __str__(self):return 'alex li'obj = Foo()
print(obj)
# 输出:alex li

8.__getitem__、setitemdelitem
用于索引操作,如字典。以上分别表示获取、设置、删除数据

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']      # 自动触发执行 __getitem__
obj['k2'] = 'alex'   # 自动触发执行 __setitem__
del obj['k1']

9__new__  metaclass
==类的生成 调用 顺序依次是 new --> init --> call==

详情参考alex博客

http://www.cnblogs.com/alex3714/articles/5213184.html

反射

# #### 检查是否含有成员 ####
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')
print(getattr(obj,'age') )
print(getattr(obj,'show')(123))

异常处理

1.异常结构

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

2.主动触发异常

try:raise Exception('错误了。。。')
except Exception as e:print(e)

3.自定义异常

class WupeiqiException(Exception):def __init__(self, msg):self.message = msgdef __str__(self):return self.messagetry:raise WupeiqiException('我的异常')
except WupeiqiException as e:print(e)

4.常用的异常

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

5.断言

a=[1,2,3,4]
assert type(a) is list
print('list......')

转载于:https://www.cnblogs.com/Jason-lin/p/7545933.html

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

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

相关文章

在Ubuntu桌面上显示我的电脑等图标

在 GNOME 中显示 计算机&#xff0c;用户主文件夹 和 回收站等桌面图标。* 运行程序 gconf-editor 打开配置编辑器* 选择 apps → nautilus → 桌面* 勾选 computer_icon_visible、home_icon_visible 和 trash_icon_visible 边上的复选框。这些更改会立即生效。转载于:https://…

服务器的智能监控管理结束,通过服务器监控告警进行异常排障

告警是服务监控应用及时发现、主动提醒用户异常的功能&#xff0c;保证了用户在任何情况下都能及时发现异常信息&#xff0c;提升 IT 人员运维的效率。本教程介绍如何使用告警功能实现服务器的异常排障。在目标监控机器上安装 logkit-pro使用智能日志平台的服务监控应用&#x…

SQL创建表格——手写代码

打开phpstudy&#xff0c;打开Navicat for MySQL&#xff0c;进入要创建表格的数据库&#xff0c;点击上方“查询”按钮&#xff0c;“创建查询”&#xff0c;即可输入代码进行创建。 例&#xff1a; create table class( class_id int not null primary key, class varchar(2…

css改变指针形状,css 指针样式

定义鼠标样式cursor:pointer;取值: [ [ ,]* [ auto | crosshair | default | pointer | move | e-resize | ne-resize | nw-resize | n-resize | se-resize | sw-resize | s-resize | w-resize | text | wait | help | progress ] ] | inherit[ ,]*: 根据用户定义的资源显示aut…

欧洲最权威的12星座分析①

<?xml:namespace prefix o ns "urn:schemas-microsoft-com:office:office" />听说这分析对于目前的大多数人来说都是最准的。白羊座“白羊吗&#xff1f;太恐怖了&#xff01;他们脾气大、暴力、瞧不起人&#xff0c;还是躲远些、小心为妙&#xff01;” 如…

Elasticsearch 启动报错:received plaintext http traffic on an https channel, closing connection Netty4Ht

elasticsearch 启动报错&#xff1a;received plaintext http traffic on an https channel, closing connection Netty4HttpChannel。 现象&#xff0c;当启动Elasticsearch后&#xff0c;在浏览器输入地址 http://localhost:9200/ 后&#xff0c;报错 received plaintext…

List,Set和Map详解及其区别和他们分别适用的场景

Java中的集合包括三大类&#xff0c;它们是Set&#xff08;集&#xff09;、List&#xff08;列表&#xff09;和Map&#xff08;映射&#xff09;&#xff0c;它们都处于java.util包中&#xff0c;Set、List和Map都是接口&#xff0c;它们有各自的实现类。Set的实现类主要有Ha…

django+ajax+表格加载,如何使用ajax在Django-admin表格内联中读取/写入输入字段?

小编典典urls.pyfrom django.conf import settingsurlpatterns patterns(,(r^json/tshirt/$, json_order),(r^site_media/(?P.*)$, django.views.static.serve, {document_root: settings.MEDIA_ROOT}),...)2. views.pyfrom django.core import serializersdef json_order(re…

中文man手册

对于e文不太好的朋友来说&#xff0c;这是使用linux的福音。最新版下载地址&#xff1a;http://code.google.com/p/manpages-zh/Ubuntu下的安装命令&#xff1a;sudo dpkg -i manpages-zh_1.5-1_all.deb安装完立即就有效果了&#xff0c;man命令显示中文帮助。

Python 三级菜单

任务要求&#xff1a; 1、列出菜单信息提供用户选择 2、根据用户选择进入下级菜单 3、用户输入b返回上一级菜单 4、用户输入q直接退出系统 流程图&#xff1a; 代码&#xff1a; 1、主文件 #!/usr/bin/env python # -*- conding:utf-8 -*- # create a menu system# 20170911 # …

xp系统连接服务器工具,xp系统远程连接服务器

xp系统远程连接服务器 内容精选换一换华为云帮助中心&#xff0c;为用户提供产品简介、价格说明、购买指南、用户指南、API参考、最佳实践、常见问题、视频帮助等技术文档&#xff0c;帮助您快速上手使用华为云服务。华为云帮助中心&#xff0c;为用户提供产品简介、价格说明、…

java面试题switch支持哪些数据类型

switch语句的数据类型&#xff1a; 基本数据类型&#xff1a;byte, short, char, int 包装数据类型&#xff1a;Byte, Short, Character, Integer 枚举类型&#xff1a;Enum 字符串类型&#xff1a;String&#xff08;Jdk 7 开始支持&#xff09;

理解文档对象模型(3)

这篇DOM说一说饱受争议window对象&#xff0c;还好window对象已经作为HTML5的一部分被添加到HTML规范之中了 1. 获取window 可以使用两种方法获取window对象&#xff0c; 正规的HTML5方式是在document对象上使用defaultView属性&#xff1b; 另一种则是使用浏览器都支持的全局…

使用ETag识别ajax,如何使用jQuery AJAX请求访问ETag头?

我正在使用jQuery ajax调用来请求来自发送HTTP响应头中的ETag的服务器的数据。我需要访问标题&#xff0c;但是当请求成功并调用jqXHR.getAllResponseHeaders()时&#xff0c;我只能看到服务器返回的标题的子集。如何使用jQuery AJAX请求访问ETag头&#xff1f;实施例&#xff…

Error:java: Compilation failed: internal java compiler error 解决办法

错误原因 导致这个错误的原因主要是因为jdk版本问题&#xff0c;此处有两个原因&#xff0c;一个是编译版本不匹配&#xff0c;一个是当前项目jdk版本不支持。 1:mac选择Preferences windows找到Setting 找到Java Complier 右边选择1.8 2:找到File ->Project Structure-&…

VC内存泄露检查工具:Visual Leak Detector

www.diybl.com 时间&#xff1a;2009-04-12 作者:匿名 编辑:sky 初识Visual Leak Detector 灵活自由是C/C语言的一大特色&#xff0c;而这也为C/C程序员出了一个难题。当程序越来越复杂时&#xff0c;内存的管理也会变得越加复杂&#xff0c;稍有不慎就会出现内存问 …

结对-人机对战象棋游戏-开发过程

我们实现了框架的规范把框架放在网页的居中位置&#xff0c;width325 height402.的一个框架 转载于:https://www.cnblogs.com/lzy616/p/7560408.html

服务器的虚拟主机用途,服务器的虚拟主机用途

服务器的虚拟主机用途 内容精选换一换为了对源端服务器进行迁移可行性评估以及为后续目的端服务器的选择和配置提供必要性数据&#xff0c;迁移Agent会收集源端服务器的相关信息并上报到主机迁移服务。收集的Windows操作系统的具体数据如表1所示。收集的Linux操作系统的具体数据…

2台无线路由器互连

2台TP-LINK无线路由器办公室电脑无法上网通过连接前台路由器实现上网前台用1台路由器有线接2台电脑办公室用1台路由器分接3台电脑由于位置关系和房屋结构不利于走网线所以用2台无线路由器实现互联操作的大体步骤1、由浏览器进入路由器WEB控制界面2、关闭路由器DHCP功能3、在无线…