假设我有一个三个类(class)的系统。GameClass在初始化时创建其他两个类的实例。

class FieldClass:
    def __init__( self ):
        return
    def AnswerAQuestion( self ):
        return 42

class PlayerClass:
    def __init__( self ):
        return
    def DoMagicHere( self ):
        # Access "AnswerAQuestion" located in the "FieldClass" instance in "GameClass"
        pass

class GameClass:
    def __init__( self ):
        self.Field = FieldClass()
        self.Player = PlayerClass()

AnswerAQuestion()实例访问位于FieldClass中的PlayerClass的最佳方法是什么?
  • 我是否必须将对FieldClass实例的引用传递给PlayerClass
  • 还有另一种更好的解决方法吗?进行上述操作将使我不得不在PlayerClass中包含一个额外的变量来保存FieldClass实例。
  • 是否有完全不同的方法来管理Python中的类关系?
  • 最佳答案

    我将使用Dependency Injection:在构造函数调用等中使用所需的GameClassFieldClass实例化PlayerClass(即,而不是像现在这样在GameClass中创建依赖对象)。

    class GameClass:
        def __init__( self, fc, pc ):
            self.Field = fc
            self.Player = pc
    
    class PlayerClass:
        def __init__( self, fc ):
            self.fc = fc
    
        def DoMagicHere( self ):
            # use self.fc
            pass
    
    fc=FieldClass()
    pc=PlayerClass(fc)
    gc=GameClass(fc, pc)
    

    使用DI,一旦设置阶段完成,您就可以轻松访问所需的成员。

    10-08 02:37