在Python中创建现有对象中的对象

时间:2016-06-17 14:18:38

标签: python class object inner-classes

我想创建一个对象来保存并在其自身内创建不同的对象。 我有一个外部类和内部类,如下所示:

class Outer:
    def __init__(self, name):
        self.name = name

    def sayHello(self):
        print "Hello " + self.name

    class Inner1:
        def __init__(self, name):
            self.name = name

    class Inner2(Inner1):
        pass

    class Inner3(Inner1):
        pass
new = outer("new")

然后需要对inner2或inner3的对象进行新的... 我用new.inner2()试了一下 但我得不到我想要的结果。 有什么提示吗?

2 个答案:

答案 0 :(得分:2)

以下是嵌套类和嵌套实例化的方法。当您重新嵌入类时,您只需嵌入类型。您必须在self.__init__

中创建实例

(如果您尝试在所有外部实例之间共享全局内部实例,请更新您的问题。)

class Outer(object):

    class Inner1(object):
        pass

    class Inner2(Inner1):
        pass

    class Inner3(Inner2):
        pass

    def __init__(self):
        self.inner1 = Outer.Inner1()
        self.inner2 = Outer.Inner2()
        self.inner3 = Outer.Inner3()

outer = Outer()

print outer.inner1
print outer.inner2
print outer.inner3

请注意,您不必为此实际使用嵌套类 - 您的类可以在类之外定义,有时更喜欢更简单和更Pythonic:

class Inner1(object):
    pass

class Inner2(Inner1):
    pass

class Inner3(Inner2):
    pass

class Outer(object):

    def __init__(self):
        self.inner1 = Inner1()
        self.inner2 = Inner2()
        self.inner3 = Inner3()

outer = Outer()

print outer.inner1
print outer.inner2
print outer.inner3

有时你也会看到......的模式。

class Inner1(object):
   pass

class Outer(object):
   Inner1 = Inner1

制作一个方便的"引用类中的类。这通常与类可能抛出的自定义异常一起使用。

There are many关于是否优先嵌套课程的不同意见。

答案 1 :(得分:2)

老实说,内部课程通常不是一个好主意,特别是如果你在"包含"之外实例化它们。类。

但是要回答你的问题,基本上内部类只是在不同的范围内声明,所以你需要引用它所在的范围。

[routerLink]=""