在 class 中创建 class 个实例

Create class instance within a class

我在 python 中有一个嵌套的 class 例如:

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

我要实现的是instance b for class B,会像instance的数据结构a 对于 class A

不过,b似乎与a没有关联。

我怎样才能做到这一点?

更新:

我要做的是像下图这样的一个java程序对象初始化:

user 似乎包含 userID 和 Password,并且与 serviceOrder 对象相关联。

很少有任何理由将 类 嵌套在 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

很可能您的首选解决方案已在 中提供。

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

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 的 class 属性。它与任何其他 class 级别的属性没有什么不同,因此必须通过拥有 class 来访问该属性,例如:

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

请注意,即使您在所有者内部也是如此 class:

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