Python 是否有“内部类”?

Python016

Python 是否有“内部类”?,第1张

首先如果照搬格式的话,是行不通的

即便加关键字也是不行的, self 和 cls 在类定义的位置无从谈起。而就算写成 Outer.outer_class_num 也是不可以的,因为这是在类的定义中,类自己的身体还在构造中,如何使用自己呢?

所以如果想写内部类的话,需要写在方法中。

注意图中两个self是不一样的,推荐可以把内部类的self换一个名字。

也可以像这样使用。

Inner是在 __init__ 当中定义的,所以只存在于实例当中。如果想像java的 public static class 那样,需要在类当中定义,这里就要用到 __new__

当然直接这么写是错误的,因为类的 __new__ ,本质也是在实例化的时候才会执行。

也就是说,在未进行过一次实例化之前, __new__ 没有被执行过, Outer类 对象中不存在 Inner内部类

这样才可以正常输出,如果想让类天生自带Inner内部类,就需要用到 metaclass

学习多种语言,确实能相互促进。每当看到一个知识点,总是会想其他语言会怎么解决这个问题。

You're trying to access Outer's class instance, from inner class

instance. So just use factory-method to build Inner instance and pass

Outer instance to it.

class Outer(object):

    def createInner(self):

        return Outer.Inner(self)

    class Inner(object):

        def __init__(self, outer_instance):

            self.outer_instance = outer_instance

            self.outer_instance.somemethod()

        def inner_method(self):

            self.outer_instance.anothermethod()