【发布时间】:2014-11-12 23:21:42
【问题描述】:
这可能是一个太笼统的问题,但它仍然困扰着我。一般来说,什么是更好的做法(以及为什么):代理或子类化基类? base 我的意思是标准类之一,通常甚至没有在 Python 中实现。
一个更具体的问题如下:我希望为图形边缘创建一个对象;图边本质上是一对两个顶点。顶点可以是任何可散列的对象。我希望边缘会比frozenset 公开更多的方法。所以我想知道我是否应该
class Edge(frozenset):
def my_method(self, *args):
return 3
或
class Edge(object):
def __init__(self, *args):
self._frozenset = frozenset(*args)
def __len__(self):
return len(self._frozenset)
def ...
第一种方法的好处是我写的更少(因为我不必复制所有的原始方法)。然而,从某种意义上说,第二种方法看起来更安全。它也更灵活,因为它允许我避免frozenset 公开的一些方法(例如difference),如果我愿意的话。
第一种方法还引入了传递参数数量的问题。如果我想控制它,我可能必须覆盖frozenset.__new__。另一方面,一般来说,第一种方法可能会更快,因为代理会产生一些开销。
我不知道这是否重要,但我通常为 Python 2.7 编写代码。
【问题讨论】:
标签: python subclass proxy-classes