简明Python魔法 - 2

再说描述符 - Descriptor

最简单的描述符

覆写类的__get____setter__函数就可以实现一个简单的描述符。对某个类型实例的读写进行额外的控制。

>>> import datetime
>>> class CurrentDate(object):
...     def __get__(self, instance, owner):
...         return datetime.date.today()
...     def __set__(self, instance, value):
...         raise NotImplementedError("Can't change the current date.")
...
>>> class Example(object):
...     date = CurrentDate()
...
>>> e = Example()
>>> e.date
datetime.date(2008, 11, 24 …
more ...

简明Python魔法 - 1

Python中类的实现

在Python的Web框架Django中,Python类的构造特性实现了它大部分的核心功能。

当Python解释器遇到类声明时,会创建一个新的namespace ,并执行其内的所有代码,并将变量注册到这个namespace中。

举例:

>>> class Foo(object):
...     print 'Loading...'
...     spam = 'eggs'
...     print 'Done!'
... 
Loading...
Done!
>>> f = Foo()
>>> f.spam
'eggs'

动态的实现一个类

使用type方法可以动态的代码中实现一个类,接受三个参数“类名”、“基类”、“属性”。

>>> Bar = type('Bar', (object,), {'spam': 'eggs'})
>>> Bar.spam
'eggs'

超类改变一切

“metaprogramming”是指一种在程序运行时创建或改变代码的编程手段。type是一个metaclass,一个创建其它类的metaclass。

我们可以替换掉原生的type,使用我们自己的版本,从而控制创建类的过程。

>>> class …
more ...

使用pip和virtuanenv

让我们从一个无聊的小段子开始。

"What’s pip?"

"A python package manager"

"How do I install it?"

"easy_install pip"

"What’s easy_install?"

"A python package manager"

pip和easy_install都是python的包管理工具,类似于ruby的gem以及nodejs的npm。

而pip是easy_install的升级版,在这个页面中提到了pip对于easy_install的升级。其中提到了一点非常重要。

pip is complementary with virtualenv, and it is encouraged that you use virtualenv to isolate your installation.

如果有同学不熟悉virtualenv,这里是一个小小的介绍。(以下翻译来自:戳我 …

more ...