2017-04-13 233 views
1

我是新来的蟒蛇,我想知道这是否可能:孩子和父母对象

我想创建一个对象并附加到它的另一个对象。

OBJECT A 
    Child 1 
    Child 2 
OBJECT B 
    Child 3 
    Child 4 
    Child 5 
     Child 6 
      Child 7 

这是可能的吗?

+1

你是什么意思“它连接到另一个对象”呢? – sgrg

+1

简短的回答是肯定的。正确的答案是:你想做什么,你认为这将解决?这听起来像一个[XY问题](https://meta.stackexchange.com/questions/66377/what-is-the-xy-problem) – TemporalWolf

+0

我们可以想象一个非常简单的问题。我有一个对象:一辆汽车。我要创建其中的两个,一个是红色的,一个是蓝色的。之后,我将创建8个轮胎(每辆车4辆),并配有不同重量的轮胎。最后我想知道蓝色车和红色车的4个轮胎的重量。 – Ralk

回答

1

要跟随你的榜样:

class Car(object): 
    def __init__(self, tire_size = 1): 
     self.tires = [Tire(tire_size) for _ in range(4)] 

class Tire(object): 
    def __init__(self, size): 
     self.weight = 2.25 * size 

现在你可以制作汽车并查询轮胎的重量:

>>> red = Car(1) 
>>> red.tires 
[<Tire object at 0x7fe08ac7d890>, <Tire object at 0x7fe08ac7d9d0>, <Tire object at 0x7fe08ac7d7d0>, <Tire object at 0x7fe08ac7d950>] 
>>> red.tires[0] 
<Tire object at 0x7fe08ac7d890> 
>>> red.tires[0].weight 
2.25 

您可以根据需要改变结构,以更好的方式(如果所有的轮胎都是一样的)是只指定tirenum_tires

>>> class Car(object): 
    def __init__(self, tire): 
     self.tire = tire 
     self.num_tires = 4 
>>> blue = Car(Tire(2)) 
>>> blue.tire.weight 
4.5 
>>> blue.num_tires 
4 
4

如果你谈论的是面向对象的条款,当然可以,你不解释清楚,你想做的事,但两件事情浮现在我的脑海里,如果你谈论的是OOP是:

  • 如果您正在讨论继承,您可以在创建子类时使子对象扩展父对象:class child(parent):
  • 如果您正在讨论对象组合,只需使子对象成为父对象的isntance变量,作为构造变量传递它
0

下面是一个例子:

在这种情况下,对象可以是一个人而不是一名员工,但是作为一名员工,他们必须是一个人。为此Person类是父母给员工

这里的链接到一篇文章,说真的帮助我理解继承: http://www.python-course.eu/python3_inheritance.php

class Person: 

    def __init__(self, first, last): 
     self.firstname = first 
     self.lastname = last 

    def Name(self): 
     return self.firstname + " " + self.lastname 

class Employee(Person): 

    def __init__(self, first, last, staffnum): 
     Person.__init__(self,first, last) 
     self.staffnumber = staffnum 

    def GetEmployee(self): 
     return self.Name() + ", " + self.staffnumber 

x = Person("Marge", "Simpson") 
y = Employee("Homer", "Simpson", "1007") 

print(x.Name()) 
print(y.GetEmployee())