我在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程序对象初始化:
用户似乎包含userID和Password,并且它与serviceOrder对象关联。
答案 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
您必须这样做的原因是B
是A
的类属性。它与任何其他类级属性没有什么不同,因此访问属性必须通过拥有类来完成,例如:
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