Python OOP - 类关系

lam*_*mas 8 python oop

假设我有一个三个类的系统.在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()
Run Code Online (Sandbox Code Playgroud)

什么是访问的最好的方式AnswerAQuestion()位于FieldClass距离的实例中PlayerClass

  • 我是否必须将FieldClass实例的引用传递给PlayerClass
  • 还有另一种更好的解决方法吗?执行上述操作将使我必须包含一个额外的变量PlayerClass来保存FieldClass实例.
  • 在Python中管理类关系有一种完全不同的方式吗?

jld*_*ont 6

我会使用依赖注入:GameClass使用required FieldClassPlayerClass构造函数调用等实例化a (即,而不是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)
Run Code Online (Sandbox Code Playgroud)

使用DI,您可以在设置阶段完成后轻松访问所需的成员.