类的特殊成员

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 C

obj = 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': <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.getitemsetitemdelitem

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

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 = msg def __str__(self):
return self.message try:
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......')
05-11 18:07
查看更多