在python中进行重构时,什么是最佳实践和/或更多pythonic,
示例:
假设我有以下文件
**large_file.py**
def large_function(x):
# ...lots of code...
return foo(y)
def foo(y):
# ...lots of code...
return function_only_called_by_foo(z)
def function_only_called_by_foo(z):
# ...lots of code...
return output
重构这种方法的一种自然方法是将foo()
和function_only_called_by_foo()
分解为各自独立的文件。但是在Java中我没有太多选择如何做到这一点,我可以想到在python中这样做的两种方法。
备选方案1:
**large_file.py**
from fooer import Fooer
def large_function(x):
# ...lots of code...
fooer = Fooer()
return fooer.foo(y)
**fooer.py**
class Fooer:
def foo(y):
# ...lots of code...
return _function_only_called_by_foo(z)
def _function_only_called_by_foo(z):
# ...lots of code...
return output
备选方案2:
**large_file.py**
from foo_file import foo
def large_function(x):
# ...lots of code...
return foo(y)
**foo_file.py**
def foo(y):
# ...lots of code...
return _function_only_called_by_foo(z)
def _function_only_called_by_foo(z):
# ...lots of code...
return output
哪种替代方案更优越,为什么? (或者还有更好的选择吗?)
这些方法都不共享任何实例变量。
答案 0 :(得分:1)
备选方案2显然更优越 - 如果您没有获得任何好处,为什么要增加课程的开销?
但是,如果您确实想这样做,请考虑制作Fooer
的方法@staticmethod
:
class Fooer(object):
@staticmethod
def foo(x):
...
return _foo_helper(x)
@staticmethod
def _foo_helper(x):
...
return y
因此,您不需要创建实例,也不需要使用self
/ cls
个参数:
from fooer import Fooer
y = Fooer.foo(x)