如何制作 Python 对象组合(在列表对象中列出对象)

how to make python objects compositions (list objects in list objects)

提问人:Dr. Joe 提问时间:1/15/2020 更新时间:1/15/2020 访问量:527

问:

我有一些 3 层,它们由父 - 子 - 子作为组合连接。 其中,子元素依赖于上层父元素(并在父元素被销毁时销毁)。 就像一本书,它有几页,它有几个词。 如何正确建模? 我想从内到外创建它们,最好的方法是将 2 个子项作为列表添加到相应的父对象中。

class Book:    
    def __init__(self, bookName):
        self.bookName = bookName
        self.listOfPageObjects = []


class Page(Book):
    pageBackColor = "white"

    def __init__(self, bookName, numberOfWords, pageNumber):
        super().__init__(bookName)
        self.numberOfWords = numberOfWords
        self.pageNumber = pageNumber
        self.listOfWordObjects = []


class Word(Page):
    wordFont = "courier"
    wordMaxLen = 100

    def __init__(self, bookName, numberOfWords, pageNumber, actualWord):
        super().__init__(bookName, numberOfWords, pageNumber)
        self.actualWord = actualWord

这是理想的方法吗?

Python 列表 继承

评论

4赞 chepner 1/15/2020
一页不是一本书,一个词也不是一页;继承在这里不合适。
0赞 PeptideWitch 1/15/2020
也许数据类修饰器比继承更合适。

答:

2赞 chepner 1/15/2020 #1

组合意味着将一个对象集合存储在另一个对象中。一个非常简单的例子:a 主要是 s 的列表,a 主要是 s 的列表。BookPagePageWord

class Book:
    def __init__(self, name, pages):
        self.book_name = name
        self.pages = pages

class Page:
    def __init__(self, number, words):
        self.number = number
        self.words = words

class Word:
    def __init__(self, word, font="Courier"):
        self.word = word
        self.font = font

pages = [Page(1, [Word("Call"), Word("me"), Word("Ishmael"), ...]),
         Page(2, [...])],
         ...
        ]

b = Book("Moby Dick", pages)

评论

0赞 Dr. Joe 1/19/2020
好的,感谢您的所有意见。这是非常有帮助的。还有 2 个问题: - 你认为没有必要用列表来做这件事,而是用字典或其他东西来做这件事吗?- 有人可以给我一个这样的用例的干净编码示例 Python 软件(通过阅读代码学习)的链接吗?