您好, 欢迎来到 !    登录 | 注册 | | 设为首页 | 收藏本站

内部类:如何在构造时获取外部类对象?

内部类:如何在构造时获取外部类对象?

在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 Wrapper

class Outer(object):
  @InnerClassDescriptor
  class Inner(object):
    def __init__(self):
      print self.outer

o = 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.Inner
i2 = o2.Inner
print i1(), i2(), i1(), i2()

应该可以正常工作,并且将o1 vs o2存放在o1.Inner比vs返回的类之外的其他任何地方o2.Inner(例如,在TLS中)将意味着这种用法的可怕结果。

但你 并没有 注明“o.Inner必须是 的同一类对象 的每个 可能o这就是实例Outer”,所以这段代码完全满足您的规格 没有 给予;-)。

其他 2022/1/1 18:38:43 有498人围观

撰写回答


你尚未登录,登录后可以

和开发者交流问题的细节

关注并接收问题和回答的更新提醒

参与内容的编辑和改进,让解决方法与时俱进

请先登录

推荐问题


联系我
置顶