在Python 2.6中,也是自定义描述符的类装饰器匹配您提供的规范:
class InnerClassDescriptor(object): def __init__(self, cls): self.cls = cls def __get__(self, instance, outerclass): class Wrapper(self.cls): outer = instance Wrapper.__name__ = self.cls.__name__ return Wrapperclass Outer(object): @InnerClassDescriptor class Inner(object): def __init__(self): print self.outero = Outer()i = o.Inner()print 'Outer is a', type(Outer)print 'Inner is a', type(o.Inner)
这发出:
<__main__.Outer object at 0x82f90>Outer is a <type 'type'>Inner is a <type 'type'>
只是为了确认
o.Inner [[is]]是一个类对象,而不是像闭包那样奇怪的东西
根据您的特殊规格。当然,每次重入都需要使用 不同的 类-即使在单线程环境中,以下内容也是如此:
o1 = Outer()o2 = Outer()i1 = o1.Inneri2 = o2.Innerprint i1(), i2(), i1(), i2()
应该可以正常工作,并且将o1 vs
o2存放在
o1.Inner比vs返回的类之外的其他任何地方
o2.Inner(例如,在TLS中)将意味着这种用法的可怕结果。
但你 并没有 注明“
o.Inner必须是 完全相同 的同一类对象 的每个
可能
o这就是实例
Outer”,所以这段代码完全满足您的规格 没有 给予;-)。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)