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

在Python中的现有对象中创建对象,python,class,object,inner-classes,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 = nam

我想创建一个对象,它可以容纳和创建不同的对象。 我有一个外部类和内部类,如下所示:

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的对象上创建新的。。。 我用新的试过了 但是我没有得到我想要的结果。
有什么提示吗?

下面是如何执行嵌套类和嵌套实例化。嵌入类时,只嵌入类型。您必须在self中创建实例

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

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
请注意,您不必为此实际使用嵌套类-您的类可以在类之外定义,并且有时更倾向于使用更简单、更具python风格的类:

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
以方便地引用类中的类。这通常用于类可能抛出的自定义异常


关于是否首选嵌套类的不同意见。

以下是如何执行嵌套类和嵌套实例化。嵌入类时,只嵌入类型。您必须在self中创建实例

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

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
请注意,您不必为此实际使用嵌套类-您的类可以在类之外定义,并且有时更倾向于使用更简单、更具python风格的类:

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
以方便地引用类中的类。这通常用于类可能抛出的自定义异常


关于是否首选嵌套类的不同意见。

老实说,内部类通常不是一个好主意,尤其是在包含类之外实例化它们时

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

# Changed to a capitol letter as that is more conventional
class Outer:
    name = ""

    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

newOuter = Outer("newOuter")
newInner2 = Outer.Inner2("newInner2")

老实说,内部类通常不是一个好主意,尤其是在包含类之外实例化它们时

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

# Changed to a capitol letter as that is more conventional
class Outer:
    name = ""

    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

newOuter = Outer("newOuter")
newInner2 = Outer.Inner2("newInner2")

1.为什么有嵌套类?2.既然它名为Inner2而不是Inner2,为什么要尝试new.Inner2?这些名称只是示例。我想要一个单独的对象,可以由用户创建,并且该对象应该能够在自身内部创建其他对象。全部由用户提供。因为我想让新对象生成一个新的内部类。我不明白你想实现什么。你能给出一些背景吗;你到底想解决什么问题?Python中很少需要嵌套类,到目前为止,代码中唯一的问题是:1。如果在嵌套子类的主体中没有pass,它在语法上是无效的;二,。键入的类名大小写不正确。是否尝试在全局作用域中实例化Inner1?1。为什么有嵌套类?2.既然它名为Inner2而不是Inner2,为什么要尝试new.Inner2?这些名称只是示例。我想要一个单独的对象,可以由用户创建,并且该对象应该能够在自身内部创建其他对象。全部由用户提供。因为我想让新对象生成一个新的内部类。我不明白你想实现什么。你能给出一些背景吗;你到底想解决什么问题?Python中很少需要嵌套类,到目前为止,代码中唯一的问题是:1。如果在嵌套子类的主体中没有pass,它在语法上是无效的;二,。您键入的类名大小写不正确。您是否试图在全局范围内实例化Inner1?有时这是首选的,但通常应该是首选的@Aarontagart是的,我只是在研究!有时这是首选的,通常这是首选的@Aarontagart是的,我只是在研究!老实说,内部类通常不是一个好主意,特别是当您在包含类之外声明它们时。-这真的是你想说的吗?你是什么意思?我的意思是实例化,而不是声明:老实说,内部类通常不是一个好主意,特别是如果你在包含类之外声明它们的话这真的是你想说的吗?你是什么意思?我的意思是实例化,而不是声明: