我有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

10-06 09:21