从类中的方法提取通用逻辑的Python方法

时间:2019-10-14 14:51:16

标签: python python-3.x oop

我最近发现Guido说静态方法本质上是“意外”。

https://mail.python.org/pipermail/python-ideas/2012-May/014969.html

现在我的问题是如何提取类中不同函数使用的通用逻辑。

我一直在做以下事情:

class ChildClass(ParentClass):

    def __init__(self, foo, bar):
        self.foo = foo
        self.bar = bar
        super().__init__(self.foo, self.bar)

    @classmethod
    def from_var3(cls, baz):
        foo, bar = baz.split(',')
        return cls(foo, bar)

    @staticmethod
    def _common_method(qux):
        quux = qux  # do_something
        return quux

    def method1(self):
        qux = [f"{x}-something" for x in self.foo]
        quux = ChildClass._common_method(qux)

        return quux

    def method2(self):
        qux = [f"{x}-somethingelse" for x in self.foo]
        corge = ChildClass._common_method(qux)
        # do something with corge
        return corge

    def method3(self):
        qux = [f"{x}-somethingcompletelyelse" for x in self.foo]
        qux.sort(key=ChildClass._common_method)

,但是在考虑了从类级别上不应该使用该静态方法这一事实之后,我试图尝试一种更好的方法。

我也想到了以下方法,但是我不确定同一模块中的顶级方法和顶级类是否是pythonic(从我的角度来看,它看起来很脏)。另外,我也不想将此方法放在通用模块中并从那里调用。

def _common_method(qux):
    quux = qux  # do_something
    return quux

class ChildClass(ParentClass):

    def __init__(self, foo, bar):
        self.foo = foo
        self.bar = bar
        super().__init__(self.foo, self.bar)

    @classmethod
    def from_var3(cls, baz):
        foo, bar = baz.split(',')
        return cls(foo, bar)


    def method1(self):
        qux = [f"{x}-something" for x in self.foo]
        quux = _common_method(qux)

        return quux

    def method2(self):
        qux = [f"{x}-somethingelse" for x in self.foo]
        corge = _common_method(qux)
        # do something with corge
        return corge

    def method3(self):
        qux = [f"{x}-somethingcompletelyelse" for x in self.foo]
        qux.sort(key=_common_method)

是否有更好的方法可以在不将类设为静态方法的情况下完成类中公共逻辑的提取?

0 个答案:

没有答案