簡體   English   中英

Python-組成類的繼承

[英]Python - Inheritance of a composition class

我有2個班級。 而且我需要擴展兩者的功能,因此我需要利用這些基類的繼承。 可能嗎?

class Book:
    def __init__(self):
        self.sheets = generate_sheets()
    author = ''

    def generate_sheets(self):
         for index in range(20):
             (some_extra code)
             self.sheets.append(Sheet(index))

class Sheet:
    def __init__(self, idx):
        self.id = idx

我想創建基礎的2個子級,並且構圖在它們之間。 只會覆蓋方法generate_sheets嗎?

class DefinitionBook(Book):
    def __init__(self):
        super().__init__()
    translator = ''

    def generate_sheets(self):
        super().__init__()
        for index in range(20):
            self.sheets.append(DefSheet(index)

class DefSheet(Sheet):
    def __init__
        super().__init__()
    definition = dict()

還是可以將方法generate_sheets的部分代碼保留在Book的子類中,而僅將其中調用的部分更改為Sheet / DefSheet類?

您可以將需要使用的Sheet類(和子類)作為Book (和子類)類中的類變量; 這樣就不需要重寫子類中的generate_sheets

class Sheet:
    def __init__(self, idx):
        self.id = idx
    def __str__(self):
        return f"{self.__class__.__name__}"

class Book:
    sheet = Sheet    
    def __init__(self):
        self.sheets = []
        self.generate_sheets()

    def generate_sheets(self):
        for index in range(20):
            self.sheets.append(self.__class__.sheet(index))

    def __str__(self):
        return f"{self.__class__.__name__} - {self.sheet.__name__}"



class DefSheet(Sheet):
    def __init__(self, idx):
        super().__init__(idx)

class DefinitionBook(Book):
    sheet = DefSheet
    def __init__(self):
        super().__init__()


b = Book()
print(b, b.sheets[0])
d = DefinitionBook()
print(d, d.sheets[0])

輸出:

Book - Sheet Sheet
DefinitionBook - DefSheet DefSheet

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM