1 回答
TA贡献1841条经验 获得超3个赞
头部不是一种身体,它是身体的一部分AFAIK。
所以你应该使用组合而不是继承:
class Head:
def __init__(self):
# ...Set-up head...
def head_actions():
print('Head does something')
class Body:
def __init__(self):
self.head = Head()
# ...Set-up body...
def body_actions:
print('Body does something')
现在你可以这样做:
body = Body()
body.body_actions()
body.head.head_actions()
你得到无限递归的原因是你Body是 的超类Head,所以当你调用super().__init__()你实例化 a 时Body,它在你的实现中创建了 a Head,它调用super().__init__()等等。
组合(如果这就是“嵌套”的意思)不是坏习惯,它是标准做法,通常比继承更有意义。
编辑以回应评论
要从 访问Body方法,Head您可以传递Body对创建时的引用。所以重新定义类如下:
class Head:
def __init__(self, body):
self.body = body
def head_actions():
print('Head does something')
class Body:
def __init__(self):
self.head = Head(self)
def body_actions:
print('Body does something')
现在您可以从身体访问头部,从头部访问身体:
body = Body()
head = body.head
head.body.body_actions()
甚至
body.head.body.body_actions()
添加回答
举报