【问题标题】:Does aggregation (OOP Concept) in Python restrict the child object from being owned by other objects?Python中的聚合(OOP概念)是否限制子对象被其他对象拥有?
【发布时间】:2020-12-04 11:42:58
【问题描述】:

我读过这样的声明:“当对象有自己的生命周期并且子对象只能与一个父对象关联时,就会发生聚合”。但是,它适用于我的代码:-

class Country:
    def __init__(self, name=None, population=0):
        self.name = name
        self.population = population

    def printDetails(self):
        print("Country Name:", self.name)
        print("Country Population", self.population)


class Person:
    def __init__(self, name, country):
        self.name = name
        self.country = country

    def printDetails(self):
        print("Person Name:", self.name)
        self.country.printDetails()

class Man:
    def __init__(self, name, country):
        self.name = name
        self.country = country

    def printDetails(self):
        print("Person Name:", self.name)
        self.country.printDetails()



c = Country("Wales", 1500)
p = Person("Joe", c)
m = Man('John', c);
p.printDetails()
m.printDetails()

c.printDetails()

【问题讨论】:

  • 您的子类PersonMan 只有一个父对象Country。这与您引用的内容有何不同?
  • 父对象是PersonMan,因为它们拥有对象Country,对吧?
  • 不,恰恰相反。当你有一个一对多的关系时,一个是父母,许多是孩子。所以一个国家的所有居民都是孩子。
  • 我认为这正是 OP 所要求的,@Barmar。在 OO 的意义上,对象 O 的父对象(或者我更喜欢“所有者”)是一个对 O 的引用或以某种方式合并 O 的对象。引用 O 的多个对象可能会否定这一点,但这并不能扭转局面。这只是意味着它们之间的关系不满足聚合的通常定义——在任一方向上。
  • 引用本身并不定义父子关系。

标签: python python-3.x class oop aggregation


【解决方案1】:

我读到这个声明“当对象有它们的 自己的生命周期和子对象只能与一个父对象关联 对象”。但是,它适用于我的代码 [...]

你误会了。您引用的声明是“聚合”定义的一部分。您当然可以编写以不同方式做事的代码,但就其这样做而言,它并没有展示聚合——至少,不是根据您正在查看的定义。

【讨论】:

    猜你喜欢
    • 2013-06-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-09-10
    相关资源
    最近更新 更多