Python提供了一些特殊方法, 掌握他们可以完成许多酷炫功能的实现, 这些特殊方法的命名一般以__开头, 并以__结尾. 这些方法由Python解释器自动调用.
1. __slots__, dir()与__dict__
如果我们要限制一个类中的可以添加的属性, 可以定义一个特殊的变量__slots__, 简单的示例如下:
class Company(object):
__slots__ = ('area', 'member')
huawei = Company()
huawei.area = 'chengdu'
print "huawei.area =", huawei.area
huawei.Found_time = '2008'
print "huawei.Found_time =", huawei.Found_time
# huawei.area = chengdu
# AttributeError: 'Company' object has no attribute 'Found_time'
而查看类属性的方法有两种: dir()内建函数与__dict__, 其中dir()返回对象属性的一个名称列表, 使用继承关系返回反馈一个对象完整的有效属性. 而__dict__返回的是一个字典. 它的键是属性名, 键值是相应的属性的数据值. __dict__返回的仅仅是那个实例的局部属性集合字典, 与类关系没有那么紧密, 独立于其他实例与属性. 并且很多对象并没有__dict__, 比如list.
class Company(object):
area = 'Finance'
def __init__(self, member=12, Found_time='2008'):
self.member = member
self.Found_time = Found_time
huawei = Company()
huawei.location = 'gaoxinxiqu'
huawei = Company()
print "huawei.__dict__ =", huawei.__dict__
print "huawei.__dict__ =", huawei.__dict__
print dir(huawei)
# huawei.__dict__ = {'member': 12, 'Found_time': '2008', 'location': 'gaoxinxiqu'}
# huawei.__dict__ = {'member': 12, 'Found_time': '2008'}
# ['Found_time', '__class__', '__delattr__', '__dict__', '__doc__', '__format__', '__getattribute__', '__hash__', '__init__', '__module__', '__new__', '__reduce__', '__reduce_ex__', '__repr__', '__setattr__', '__sizeof__', '__str__', '__subclasshook__', '__weakref__', 'area', 'location', 'member']
这里需要明确一点, area是类属性, 而member和Found_time是实例属性(通过__init__构造设置的属性), 内建函数 dir() 可以显示类属性,同样还可以打印所有实例属性, __dict__只是显示实例属性字典.