gpt4 book ai didi

python - 继承:更改子方法的签名

转载 作者:太空宇宙 更新时间:2023-11-03 11:42:52 24 4
gpt4 key购买 nike

当存在更改子项中的方法签名的“坏主意”时,我试图弄清楚 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/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com