0

我有这样的课

class MainClass():
    blah blah blah

class AnotherClass():
    def __init__(self, main_class):
          self.main_class = main_class

    def required_method(self):
          blah blah blah

我不太了解如何使用组合(不是继承),但我认为我必须做类似上面的事情。

我的要求是:

我应该能够使用 MainClass 的实例调用 AnotherClass() 的函数,如下所示:

main_class.AnotherClass.required_method()

截至目前,我能够做到这一点:

 main_class = MainClass()
 another = AnotherClass(main_class)
 another.required_method()

谢谢。

4

2 回答 2

2
class MainClass():
    def __init__(self, another_class):
      self.another_class = another_class

class AnotherClass():

    def required_method(self):
       blah blah blah

another = AnotherClass()
main_class = MainClass(another_class)
main_class.another_class.required_method()
于 2013-04-26T11:45:54.633 回答
0

如果您使用组合,主要是因为您想将某些类功能隐藏到另一个类中:

class ComplexClass(object):
    def __init__(self, component):
        self._component = component

    def hello(self):
        self._component.hello()

class Component(object):
    def hello(self):
        print "I am a Component" 

class AnotherComponent(object):
    def hello(self):
        print "I am a AnotherComponent" 


>>> complex = ComplexClass(Component()):
>>> complex.hello()
>>> I am a Component
>>> complex = ComplexClass(AnotherComponent()):
>>> complex.hello()
>>> I am a AnotherComponent

这里ComplexClass使用 a Component,但用户ComplexClass不需要知道(也不应该)它对 . 做了什么Component

当然,你总是可以

complex._component.hello()

whencomplex只是其他对象的容器(那么_component 应该是 component)。没关系,但这不是构图的重点

于 2013-04-26T11:57:38.110 回答