首先如果照搬格式的话,是行不通的
即便加关键字也是不行的, 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()