Python下的Magic特殊方法

本文详细介绍了Python中特殊方法__slots__、dir()与__dict__的使用,包括如何限制类中的属性、查看类属性的方法以及__dict__的特性。

        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__只是显示实例属性字典.




评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值