我创建了一个类,它是tuple
包装器,元组不支持项突变。
我应该离开__setitem__
和__delitem__
实现,还是像下面这样实现那些方法(因此属于被拒绝的遗赠代码气味)?哪种方法更像Python?在这种情况下,自定义异常不是更好吗?在
def __setitem__(self, key, value):
"""
:raise: Always.
:raises: TypeError
"""
self.data_set[key] = value # Raise from tuple.
def __delitem__(self, key):
"""
:raise: Always.
:raises: TypeError
"""
raise TypeError("Item deletion is unsupported") # Custom exceptions thrown.
实现其中一个或另一个,或者两者都实现(如果它们对自定义类有意义)。在
{{{1>你可以在cd2>中实现的语法。在
如果您实现
__delitem__()
,您将能够使用del yourobject[yourindex]
仅仅为了引发异常而显式地实现一个方法是没有意义的,Python默认情况下会这样做:
将给出
TypeError: 'Test' object does not support item assignment
虽然这是个品位问题,但我认为你根本不应该实施它们。{1{A>协议使用
如果你的类应该是一个正确的元组子类型(根据Liskov substitution principle),那么它的行为方式应该与元组wrt/to set/del相同——如果你不定义
__setitem__
或__delitem__
,那么这是默认行为。我不认为那会属于“拒绝遗产”的范畴。在如果你的类使用一个元组作为它的实现的一部分,但是不应该是一个正确的元组子类型,那么做任何有意义的事情-但是如果你不想允许项分配/删除,那么最简单的事情就是不实现它们。在
相关问题 更多 >
编程相关推荐