当存在更改子项中的方法签名的“坏主意”时,我试图弄清楚 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
所以问题是如何以更“pythonic”的方式制作它,同时考虑到最佳 python 实践?当然,我们可以在父(子)方法中使用 *args、**kwargs
和其他类似 **kwargs
的方法,但恐怕这会使我的代码变少可读( self 记录)。
最佳答案
我想说的是,只需将参数添加回默认值 None 的关键字即可。然后引发错误,解释部分输入数据丢失。
class ClientC(BaseClient):
....
def create(self,entity_id=None, data):
if entity_id:
raise RedudantInformationError("Value for entity_id does nothing")
pass
这样,每当程序员试图像处理其他 child 一样处理 child C 时,他都会收到警告提醒他,但是他可以使用 try-Syntax 轻松地逐步进行。
关于python - 继承:更改子方法的签名,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45523156/