2

我试图将一些对象包含到父类中,但这些对象需要能够访问父类的方法和属性。

问题是我有一个has-a关系而不是is-a关系。这通常暗示了一种组合结构,但组合使得访问父类对象的方法和属性变得更加困难。

我有这个示例代码来说明我需要什么:

class Body:
    def __init__(self):
        self.head_obj = Head() # << head_obj is now part of Body object
        # ...Set-up body...

    def body_actions(self):
        print('Body does something')

    def common_method(self):
        print('Body does something Head can do') # << Head needs this method

class Head:
    def __init__(self):
        # ...Set-up head...

    def head_actions(self):
        print('Head does something')
        Body.common_method() # <<This call does not work without inheritance

在上面的代码中,一个Head对象需要通过 实例化Body,并且该Head对象应该能够访问Body. 这意味着一种混合继承和组合结构,但我无法弄清楚。

4

1 回答 1

3

您可以通过将 Body 的当前实例传递给 Head 来完成这项工作:

class Body:
    def __init__(self):
        self.head_obj = Head(self)

...

class Head:
    def __init__(self, body_obj):
        self.body_obj = body_obj

    def head_actions(self):
        print('Head does something')
        self.body_obj.common_method() 

但我真的认为你应该重新考虑你的设计。这增加了两个类之间的大量耦合,并使其非常混乱。

于 2018-09-27T14:00:30.333 回答