Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/.net/20.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在Python中,将两个类相互链接的正确方法是什么_Python_Oop_Attributes - Fatal编程技术网

在Python中,将两个类相互链接的正确方法是什么

在Python中,将两个类相互链接的正确方法是什么,python,oop,attributes,Python,Oop,Attributes,我正在用python编写snake来练习。 因此,我必须分类:Field()和Snake() 我必须从字段中的Snake获取属性 反过来也是如此 我是这样做的 if __name__ == "__main__": snake=Snake() field=Field(snake) snake.field = field 使用_init_; in字段: def __init__(self, snake): self.snake = snake 这是一种“正确”的方法,还是有更好或

我正在用python编写snake来练习。 因此,我必须分类:
Field()
Snake()
我必须从
字段中的
Snake
获取属性 反过来也是如此

我是这样做的

if __name__ == "__main__":
  snake=Snake()
  field=Field(snake)
  snake.field = field
使用_init_; in字段:

def __init__(self, snake):
  self.snake = snake

这是一种“正确”的方法,还是有更好或更通用的方法?

如果两个类必须相互引用,那么确保这一点的更好方法是:

class Snake:
    def set_field(self, field):
        self.field = field


class Field:
    def __init__(self, snake):
        self.snake = snake
        snake.set_field(self)

snake = Snake()
field = Field(snake)
现在,您不再需要显式地编写
snake.field=field
,因为现在当您使用
snake
对象的实例构造
field
对象时,
field
构造函数将确保
snake
对象通过引用回到
field
对象来初始化。关键是,必要的初始化代码应该放在构造函数中,即
\uuuu init\uuuu
方法,既然
字段
之间存在双向关系,那么就在代码中明确说明它。

为什么两者都需要对方?“蛇有一些姿势”我同意,但为什么蛇的“食物”是在野外制作的呢。即使他们不需要对方,我仍然想知道,如果他们需要对方,我该怎么做