gpt4 book ai didi

coding-style - 良好的语义,子类还是模拟?

转载 作者:行者123 更新时间:2023-11-28 23:05:30 24 4
gpt4 key购买 nike

我使用 python 已经有一段时间了,我很高兴在大多数形式中使用它,但我想知道哪种形式更像 pythonic。模拟对象和类型是正确的,还是从这些类型继承或继承更好。我可以看到两者的优点和缺点。执行此操作的正确方法是什么?

子类化方法

class UniqueDict(dict):
def __init__(self, *args, **kwargs):
dict.__init__(self, *args, **kwargs)

def __setitem__(self, key, value):
if key not in self:
dict.__setitem__(self, key, value)
else:
raise KeyError("Key already exists")

模拟方法

class UniqueDict(object):
def __init__(self, *args, **kwargs):
self.di = dict(*args, **kwargs)

def __setitem__(self, key, value):
if key not in self.di:
self.di[key] = value
else:
raise KeyError("Key already exists")

最佳答案

在这里你必须问自己的关键问题是:

"How should my class change if the 'parent' class changes?"

假设新方法被添加到 dict 中,您不会在 UniqueDict 中覆盖它。如果您想表达 UniqueDict 只是 dict 行为的一个小推导,那么您可以继承 因为您将自动获得对基类的更改。如果你想表达 UniqueDict 有点像 dict 但实际上不是,你应该使用 'emulation'模式

关于coding-style - 良好的语义,子类还是模拟?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5948110/

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