褪去许多人认为"花哨怪异"的语法以及似乎"眼花缭乱"的各种模块等华丽的外衣,Python还剩下什么?对象!

对象是Python的最小的单元。要想拾起python,你最好忘记int,忘记string,忘记char,你最好也忘记public, private, protect(因为最小的对象仅仅是一个概念)... 忘不了,你只能得到手中的剑,忘记了,你就可以掌握心中的剑。

下面将以一小段代码,期望能让你对Python的对象有一点点的了解...

# -*- coding: utf8 -*-
# 下面""" """是除了#之外的Python的令一种注释方法
"""
这个类继承了object, object是Python的最小单元,可以在Python的">>>"控制台用dir(objct)或者dir (__builtins__.object)命令查看它的属性,可以看到__setattr__, __new__...他们是python中任何对象都会具有的属性,你也可以dir(1)和dir(int)看看,可看到更多内容,在这里,1作为一个实例化的int对象出现
而这些__xxx__属性有什么用呢?在接下来的代码中,我们可以了解__getitem__和__setitem__有什么用(这两个属性在dict对象中非常重要)
"""

class WPUnit(object):
    # 对象实例化
    def __init__(self):
        self._res = {}

    def __setitem__(self, key, val):
        self._res[key] = val

    def __getitem__(self, key):
        if self._res.has_key(key):
            return self._res[key]
        else:
            res = WPUnit()
            self._res[key] = res
            return res

a =WPUnit()
a['a']['b']['c']['d']['e']['f']['g'] = 5
print a['a']['b']['c']['d']['e']['f']['g']
a['a'] = 'vv'
print a['a']



将上述代码保存为文件,然后执行。
我们可看到
5
vv

在a['a'] = 'vv'中,程序做了一步:调用__setitem__
在print a['a']中,程序做了两步: 调用__getitem__(然后再调用一个__str__,这是任何对象在被print之前都会调用), 然后print

在(a['a']['b']['c']...)['g'] = 5
中先做了__getitem__... 最后在运算到xx['g']时,调用__setitem__...
在print a['a']['b']['c']...['g']中,a对象一直调用__getitem__(最后调用__str__),然后再执行print

总之,Python是骨子里透着"对象气息"的编程语言。

river/oopy (last edited 2009-12-25 07:16:31 by localhost)