我有两个类,具有相似的方法(readwriteinsert),但是由于农产品的文件类型不同,它们的方法必须以不同的方式实现。理想情况下,我希望用户初始化基本类型,并在实例化期间根据关键字返回适当的子类型:

c = SomeThing() # returns subclass of type 1 (set in default)
c = Something(flag=True) # returns the other subclass


最初,我尝试将return语句放入基类的__init__中,但是显然__init__应该返回None,因此不确定在哪里设置它;我应该只创建返回适当类型的基类工厂方法吗?:

class SomeThing:
    def __init__(self, flag=False):
        self.build(flag)
    def build(self, flag):
        if not flag:
            return SubclassOne()
        reutnr SubclassTwo()


还是有更好的方法根据实例化时传递的关键字来动态绑定适当的方法?我不认为这将是理想的:

class SomeThing:
    def __init__(self, flag=False):
        if not flag:
            setattr(self, 'write', self.write_one)
        else:
            setattr(self, 'write', self.write_two)
    def write_one(self):
        # stuff
    def write_two(self):
        # stuff


因为接口的用户可以简单地访问其他方法,并且我不想在类之外定义每个方法,因为那样的话,用户可以说做from something import write_one这是不合适的行为。

最佳答案

我建议您去一家工厂:

class Base(object):
    # ...

class SomeThing(Base):
    # ...

class OtherThing(Base):
    # ...

def create_thing(flag = False):
    if flag:
        return SomeThing()
    else:
        return OtherThing()

07-24 09:52
查看更多