我试图弄清楚什么是在Python中继承原则的最佳实践,当在子中更改方法签名时存在“坏主意”。继承:更改子方法的签名
让我们假设我们有一些基础类BaseClient
与已经实施的create
方法(和一些抽象的)适合适合几乎所有的“后代”,除了一个:
class BaseClient(object):
def __init__(self, connection=None):
pass
def create(self, entity_id, data=None):
pass
class ClientA(BaseClient):
pass
class ClientB(BaseClient):
pass
中唯一的类ClientC
需要的另一种实现方式create
方法带有一点点的另一种方法签名
class ClientC(BaseClient):
....
def create(self, data):
pass
所以现在的问题是如何使这个更“Python化”的方式,考虑到最好蟒蛇的做法?当然,我们可以在父(子)方法中使用*args, **kwargs
和其他**kwargs
类似的方法,但是恐怕它会使我的代码不易读(自我记录)。
替换原理:通常不是一个好的设计,它有一个不能做基类的子类 - 'x.create(entity_id)'适用于'BaseClient',因此它应该适用于它的子类。 – zch
为什么ClientC需要另一个创建实现? – Gribouillis
什么zch说:一个子类型可以添加新的参数方法签名,但它不应该删除它们,因为它违反[Liskov替代原则](https://en.wikipedia.org/wiki/Liskov_substitution_principle)。 –