Python: 绕开 __init__
来源:岁月联盟
时间:2011-04-15
>>> class A(object):... def __init__(self, x, y):... print "init", x, y... self.x = x... self.y = y... def test(self):... print "test:", self.x, self.y... >>> class _Empty(object): pass...>>> o = _Empty()>>> o.__class__ = A>>> o.x = 1>>> o.y = 2>>> o.test()test: 1 2>>> type(o)<class __main__.A>>>> isinstance(o, A)True
对于 classic class,我们还可以直接用 types.instance(),这样更简单一些。
>>> class A:... def __init__(self, x, y):... print "init:", x, y... self.x = x... self.y = y... def test(self):... print "test:", self.x, self.y... >>> import types>>> a1 = types.InstanceType(A, dict(x = 1, y = 2))>>> a1.test()test: 1 2>>> a1.__class__<class __main__.A at 0x1025869b0>>>> class _Empty: pass... >>> a2 = _Empty()>>> a2.__class__ = A>>> a2.x = 1>>> a2.y = 2>>> a2.test()test: 1 2
可见 Python 的对象区别在于 __class__、__bases__ 和 __dict__ 这些,其他的好说。
顺便提一下 types module,我们也许还会用到下面这样的 "动态" 编程方式。
>>> import sys, types>>> sys.modules["X"] = types.ModuleType("X", "test module")>>> import X>>> X.__doc__test module
上一篇:Python: 全局变量
下一篇:python实现直接插入排序方法