我最近发现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的(从我的persepctive来看,它看起来很脏)。我也不想把这个方法放在一个公共模块中,然后从那里调用。你知道吗
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)
有没有更好的方法来完成类中公共逻辑的提取而不使其成为静态方法?你知道吗
目前没有回答
相关问题 更多 >
编程相关推荐