博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
类的特殊成员&反射&异常处理
阅读量:4310 次
发布时间:2019-06-06

本文共 3255 字,大约阅读时间需要 10 分钟。

类的特殊成员

1.__doc__表示类的描述信息

class Foo(object):    """ 描述类信息,这是用于看片的神奇 """     def func(self):        pass print(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 = name        self.count = count    def func(self, *args, **kwargs):        print('func')# 获取类的成员,即:静态字段、方法、print(Province.__dict__)#打印类里的所有属性,不包括实例属性# 输出:{'country': 'China', '__module__': '__main__', 'func': 
, '__init__':
, '__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:    # 主代码块    passexcept KeyError as e:    # 异常时,执行该块    passelse:    # 主代码块执行完,执行该块    passfinally:    # 无论异常与否,最终执行该块    pass

2.主动触发异常

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

3.自定义异常

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

4.常用的异常

AttributeError 试图访问一个对象没有的树形,比如foo.x,但是foo没有属性xIOError 输入/输出异常;基本上是无法打开文件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 listprint('list......')

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

你可能感兴趣的文章
迷宫城堡 HDU - 1269 (强连通分量)
查看>>
eigenface资料整合
查看>>
jquery tree的使用
查看>>
JS构造函数、原型对象、隐含参数this
查看>>
delegate 与 event 不得不说的关系~
查看>>
Bootstrap 基础讲解2
查看>>
获取ServletContext
查看>>
七周成为数据分析师07_统计学基础
查看>>
变革之心
查看>>
IAP Store Kit Guide(中文)
查看>>
VS 2012 ASPX 页面编辑器的一点改进
查看>>
Python单元测试框架——unittest
查看>>
django序列化 serializers
查看>>
Centos7忘记root密码,修改root密码及其他用户密码
查看>>
删除数组指定的某个元素
查看>>
centos6.3 安装配置redis
查看>>
实现Callable接口。带返回值的线程
查看>>
一行代码将两个列表拼接出第三个列表(两个可迭代对象相加产生第三个可迭代对象)--map()方法...
查看>>
程序人口--MainFrame.java
查看>>
12-25造数据库面向对象
查看>>