我有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类?
答案 0 :(得分:4)
您可以将需要使用的类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