是否可以在python中使用双向组合?

时间:2017-04-27 17:22:50

标签: python python-3.x class composition

首先我非常抱歉,如果这是一个错误的方式提出这个问题所以请不要扯掉我。我想要做的是与以下内容非常类似的事情。

class Driver:
    def __init__(self):
        self.kind = "Driver"
    def class_of_driver(self):
        if self.model == 'corvette':
            print('fast')
class Car:
    def __init__(self, brand, model, cost, color):
        self.brand = brand
        self.model = model
        self.cost = cost
        self.color = color
        self.drivers = Driver()

我希望能够像这样创建对象:

corvette = Car('chevy','corvette','200','red')

然后ulitmately可以做类似的事情:

corvette.class_of_driver

corvette.class_of_driver()

并在此方案中获得快速的返回。我一直在弄乱这一小时,然后陷入困境。我知道我可以将自己传递给自己:

self.drivers = Driver(self)

但是,如果对象在将来发生变化,它当然不会反映出这种变化。

非常感谢任何建议,让我提前说谢谢。

2 个答案:

答案 0 :(得分:3)

一种简单的方法是通过在实例化时将Driver对象传递给它来赋予Driver Car属性:

class Driver(object):
    def __init__(self, car):
        self.kind = "Driver"
        self.car = car
    def class_of_driver(self):
        if self.car.model == 'corvette':
            print('fast')
class Car(object):
    def __init__(self, brand, model, cost, color):
        self.brand = brand
        self.model = model
        self.cost = cost
        self.color = color
        self.drivers = Driver(self)

答案 1 :(得分:3)

当然可以。两个对象相互保持引用是相当常见的。这是一种方法:

<div class="first">
  <div class="left"></div>
  <div class="grid-break vert"></div>
  <div class="right"></div>
</div>

<div class="grid-break hori"></div>

<div class="second">
  <div class="left"></div>
  <div class="grid-break vert"></div>
  <div class="right"></div>
</div>