Я недавно узнал, что Гвидо сказал, что статические методы, по сути, "случайность".
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)
Есть ли лучший способ выполнить извлечение общей логики в классе, не делая его статическим методом?