Python 类构造函数应该返回子类吗?

Python 类构造函数应该返回子类吗?,python,oop,coding-style,Python,Oop,Coding Style,类构造函数应该返回子类吗 这主要是关于OOP风格和python风格的问题。我有一个问题,我需要实现一个通用的案例解决方案,并且出于性能原因,我需要为特定的输入类型实现一个优化的解决方案。输入类型取决于用户。目前,我已经通过对一般案例解决方案进行子分类来实现这一点,以生成优化的解决方案。我用下面的例子来描述我的意思 from collections import Counter class MyCounter(object): """General Case Counter"""

类构造函数应该返回子类吗

这主要是关于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)

使用返回相应类实例的工厂函数

def makeCounter(seq):
    if hasOnlyHashables(seq):
        return OptimizedCounter(seq)
    else:
        return MyCounter(seq)

您的分配器实现有点不正确。如果需要创建子(或不同)类型的实例,那么可以通过调用其构造函数来实现;只有当您想创建当前类的实例时,才应该调用父类的(
对象,在本例中为
)分配器