标签:
class Foo:
""" 描述类信息,这是用于看片的神奇 """
def func(self):
pass
print Foo.__doc__
==============
描述类信息,这是用于看片的神奇
构造方法,通过类创建对象时,自动触发执行。
class Foo:
def__init__(self, name):
self.name = name
self.age = 18
obj = Foo(‘wupeiqi‘)
# 自动执行类中的 __init__ 方法
析构方法,当对象在内存中被释放时,自动触发执行。
注:此方法一般无须定义,因为Python是一门高级语言,程序员在使用时无需关心内存的分配和释放,因为此工作都是交给Python解释器来执行,所以,析构函数的调用是由解释器在进行垃圾回收时自动触发执行的。
class Foo:
def__del__(self):
pass
class Foo:
def__init__(self):
passdef__call__(self, *args, **kwargs):
print‘__call__‘
obj = Foo() # 执行 __init__
obj() # 执行 __call__
上文中我们知道:类的普通字段属于对象;类中的静态字段和方法等属于类,即:
class Province: 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 的成员
obj1 = Province(‘HeBei‘,10000) print obj1.__dict__ # 输出:{‘count‘: 10000, ‘name‘: ‘HeBei‘}
class Foo:
def__str__(self):
return‘wupeiqi‘
obj = Foo()
print obj
# 输出:wupeiqi
#!/usr/bin/env python
# -*- coding:utf-8 -*-
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‘] = ‘wupeiqi‘ # 自动触发执行 __setitem__
del obj[‘k1‘] # 自动触发执行 __delitem__
#!/usr/bin/env python
# -*- coding:utf-8 -*-
class Foo(object):
def __getslice__(self, i, j):
print ‘__getslice__‘,i,j
def __setslice__(self, i, j, sequence):
print ‘__setslice__‘,i,j
def __delslice__(self, i, j):
print ‘__delslice__‘,i,j
obj = Foo()
obj[-1:1] # 自动触发执行 __getslice__
obj[0:1] = [11,22,33,44] # 自动触发执行 __setslice__
del obj[0:2] # 自动触发执行 __delslice__
class Foo(object):
pass
obj = Foo()
for i in obj:
print i
# 报错:TypeError: ‘Foo‘ object is not iterable 可迭代的
第二步:
#!/usr/bin/env python
# -*- coding:utf-8 -*-
class Foo(object):
def__iter__(self):
pass
obj = Foo()
for i in obj:
print i
# 报错:TypeError: iter() returned non-iterator of type ‘NoneType‘
第三步:
#!/usr/bin/env python
# -*- coding:utf-8 -*-
class Foo(object):
def__init__(self, sq):
self.sq = sq
def__iter__(self):
return iter(self.sq)
obj = Foo([11,22,33,44])
for i in obj:
print i
以上步骤可以看出,for循环迭代的其实是 iter([11,22,33,44]) ,所以执行流程可以变更为:
#!/usr/bin/env python
# -*- coding:utf-8 -*-
obj = iter([11,22,33,44])
for i in obj:
print i
For循环语法内部
#!/usr/bin/env python
# -*- coding:utf-8 -*-
obj = iter([11,22,33,44])
while True:
val = obj.next()
print val
阅读以下代码:
class Foo(object):
def __init__(self):
pass
obj = Foo() # obj是通过Foo类实例化的对象
print type(obj) # 输出:<class ‘__main__.Foo‘> 表示,obj 对象由Foo类创建
print type(Foo) # 输出:<type ‘type‘> 表示,Foo类对象由 type 类创建
所以,obj对象是Foo类的一个实例,Foo类对象是 type 类的一个实例,即:Foo类对象 是通过type类的构造方法创建。
class Foo(object):
def func(self):
print ‘hello wupeiqi‘
b).特殊方式(type类的构造函数)
def func(self):
print ‘hello wupeiqi‘
Foo = type(‘Foo‘,(object,), {‘func‘: func})
#type第一个参数:类名
#type第二个参数:当前类的基类
#type第三个参数:类的成员
==》 类 是由 type 类实例化产生
标签:
原文地址:http://www.cnblogs.com/chenchao1990/p/5377763.html