在类中创建类实例

时间:2015-04-15 12:49:42

标签: python class nested instance

我在python中有一个嵌套类,例如:

class A():
    def __init__(self, attr1):
        self.attr1 = attr1
    class B():
        def __init__(self, attr2):
            self.attr2 = attr2

我想要实现的是 B 类的实例 b ,对于类的实例 a 的数据结构> A

但是,似乎 b a 无关。

我怎样才能做到这一点?

更新

我想要做的是如下图所示,这是一个java程序对象初始化: enter image description here

用户似乎包含userID和Password,并且它与serviceOrder对象关联。

2 个答案:

答案 0 :(得分:5)

很少有任何理由在Python中嵌套类。我认为你的意思是让B的实例作为A实例的属性,这很容易做到:

class A():
    def __init__(self, attr1, attr2):
        self.attr1 = attr1
        self.b = B(attr2)

class B():
    def __init__(self, attr2):
        self.attr2 = attr2

答案 1 :(得分:1)

您的首选解决方案很可能已在Daniel Roseman's answer中提供。

但是,如果由于某种原因,您或其他人确实需要在B内嵌套类A,您可以这样做:

class A(): 
    def __init__(self, attr1, attr2):
        self.attr1 = attr1
        self.b = A.B(attr2) # NOTE: refer to class B via ``A.B``
    class B():
        def __init__(self, attr2):
            self.attr2 = attr2

您必须这样做的原因是BA的类属性。它与任何其他类级属性没有什么不同,因此访问属性必须通过拥有类来完成,例如:

MyClass.my_attr
# OR:
getattr(MyClass, 'my_attr')
# OR:
MyClass.__dict__['my_attr']
# etc. etc.

注意即使你在拥有类中也是如此:

class MyClass():
    class_attr = 1
    def get_class_attr(self):
        # return class_attr would raise a NameError
        return MyClass.class_attr # no error

MyClass().get_class_attr() # 1