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