以下代码:
class Cache:
def __init__(self):
self._cache = []
def store(self, data):
self._cache.append(data)
def stats(self):
print('We are caching {} elements'.format(len(self._cache)))
class LegoCache(Cache):
def store(self, weight, color):
Cache.store(self, (weight, color))
有一个问题,即store
方法没有实现基类的接口。
如何改进此代码?我有以下想法:
Cache
派生,只需使用它。store
方法重命名为store_base
还有其他选择吗?
基类还必须支持这个其他用例:
class ZombieCache(Cache):
def store(self, dead_since, humans_eaten, can_be_saved=False):
Cache.store(self, dict(
dead_since=dead_since,
humans_eaten=humans_eaten,
can_be_saved=can_be_saved))
答案 0 :(得分:2)
您可以在基类中使用变量参数列表:
var fragmentproxy = viewer.impl.getFragmentProxy(viewer.model, fragIds);
console.log(fragmentproxy);
因此不需要重载此方法或为特殊情况添加具有不同名称的方法:
class Cache:
def __init__(self):
self._cache = []
def store(self, *args):
self._cache.append(args)
def stats(self):
print('We are caching {} elements'.format(len(self._cache)))
class LegoCache(Cache):
pass
# "overloading" store isn't needed
另一种解决方案可能是授权:
cache = Cache()
legoCache = LegoCache()
cache.store(x)
legoCache.store(x, y)
答案 1 :(得分:0)
我会像这样实现它,
class Cache:
def __init__(self):
self._cache = []
def store(self, data):
self._cache.append(data)
def stats(self):
print('We are caching {} elements'.format(len(self._cache)))
class LegoData(object):
def __init__(self, weight, color):
self.weight = weight
self.color = color
class LegoCache(Cache):
pass
客户端将像这样访问它,
lego_cache = LegoCache()
lego_cache.store(LegoData(weight=10, color='Green'))