如果一个类的构造函数返回一个子类?
这主要是一个关于OOP的风格和Python风格的问题。 我有问题,我需要实现一般情况下的解决方案,并且对于性能方面的原因,我需要实现特定的输入类型的优化解决方案。 输入类型取决于用户。 目前,我已经子类一般情况下的解决方案,使优化的解决方案来实现这一点。 我想出了下面的例子来帮助描述我的意思。
from collections import Counter
class MyCounter(object):
"""General Case Counter"""
def __init__(self, seq):
self.seq = seq
def count(self, key):
return sum(key == item for item in self.seq)
class OptimizedCounter(MyCounter):
"""Counter optimized for hashable types"""
def __init__(self, seq):
self.counter = Counter(seq)
def count(self, key):
return self.counter.get(key, 0)
counter = MyCounter(['a', 'a', 'b', [], [0, 1]])
counter.count([0, 1])
# 1
counter = OptimizedCounter(['a', 'a', 'b'])
counter.count('a')
# 2
我的问题是我如何设计一个平滑的界面,使用户得到相应的实例,而不必担心它是如何实现的。 我认为做这样的事情下面,但感觉丑陋的我。 有没有更规范的或面向对象的方式做这样的事情?
class MyCounter(object):
"""General Case Counter"""
def __new__(cls, seq):
if hasOnlyHashables(seq):
return object.__new__(OptimizedCounter)
else:
return object.__new__(MyCounter)