假设我有一个父类和多个子类,它们通过包含有关它们所代表的想法的更多特定信息来扩展父类。例如:
class Shape:
def __init__(self, center):
self.center = center
class Square(Shape):
def __init__(self, center, side_length):
super().__init__(self, center)
self.side_length = side_length
self.area = side_length ** 2
class Circle(Shape):
def __init__(self, center, radius):
super().__init__(self, center)
self.radius = radius
self.area = 3.14 * (radius ** 2)
假设我想在父类中实现一个方法,例如translate(new_center)
,它将返回一个与原始对象具有不同中心位置的新对象。因为所有子类的行为方式应该相同(即属性self.center
应该更改),所以将translate()
实现为父类Shape的方法是有意义的。
如果我想在每次调用Shape
时返回translate()
类型的新对象,我们可以简单地将translate()
定义为Shape
的方法,如下所示:< / p>
def translate(self, new_center):
return Shape(new_center)
但是,如果任何子类实例调用此方法,则结果将为Shape
类型,因此原始实例包含的任何其他状态信息,例如side_length
和{{1}对于area
,将丢失。此外,Square
无法定义为
translate()
因为每个子类的构造函数都需要父类构造函数不具备的附加参数。如何实现这一点而不必覆盖每个子类中的父方法(避免哪个是定义父方法的整个点)?
答案 0 :(得分:2)
您可以复制对象并修改副本:
String pattern1 = "(?<!</li>\\s{0,100})(<li>)";
String replace1 = "<ul><li>";
String pattern2 = "</li>(?!\\s{0,100}<li>)";
String replace2 = "</li></ul>";