我正在编写一个程序,其中im使用两个主要函数,但是这两个函数都使用相同的内部函数。我想知道如何以大多数pythonic方式编写它们?我的观点是将那些帮助程序隐藏在内部某个地方,并且不要重复执行帮助程序功能。
def main_function1():
helper1()
helper2()
#dowork1
def main_function2()
helper1()
helper2()
#dowork2
def helper1()
#workhelp1
def helper2()
#workhelp2
我能弄清楚的唯一合理的解决方案是使用..私有函数声明静态类?但由于:
Strictly speaking, private methods are accessible outside their class,
just not easily accessible. Nothing in Python is truly private[...]
我被困住了,没有想法。
发件人:http://www.faqs.org/docs/diveintopython/fileinfo_private.html
主题:Why are Python's 'private' methods not actually private?
我还考虑过使用内部助手和切换器声明一个主要函数,以确定应该运行哪个函数,但是我认为那是很差的解决方案。
目前,我认为最准确的方法是将普通类声明为:
class Functions:
def main_function1(self):
print("#first function#")
self.helper1()
self.helper2()
def main_function2(self):
print("#second function#")
self.helper1()
self.helper2()
def helper1(self):
print("first helper")
def helper2(self):
print("second helper")
Functions().main_function1()
Functions().main_function2()
print("###")
Functions().helper1()
输出:
#first function#
first helper
second helper
#second function#
first helper
second helper
###
first helper
但是在这里我也可以访问帮助程序,这没什么大不了的,但是仍然给我一个奇怪的理由。
答案 0 :(得分:4)
Python中没有私有函数。相反,通过在要用非公开方式表示的方法名称前加下划线,可以向您的类用户发送信号,告知这些方法不应在外部调用:
class Functions:
def main_function1(self):
print("#first function#")
self._helper1()
self._helper2()
def main_function2(self):
print("#second function#")
self._helper1()
self._helper2()
def _helper1(self):
print("first helper")
def _helper2(self):
print("second helper")
这符合“我们都同意成年人在这里”的原则-您可以触摸课程的非公开方法,但是如果使用不当,那就在您自己的头上。
答案 1 :(得分:0)
尝试一下
def get_main(name):
def helper1():
print("helper1")
def helper2():
print("helper2")
def main1():
print("Running helpers from main1")
helper1()
helper2()
def main2():
print("Running helpers from main2")
helper1()
helper2()
if name == "main1":
return main1
if name == "main2":
return main2
main1 = get_main("main1")
main2 = get_main("main2")
然后可以按以下方式运行该功能:
main1()
main2()
helper1()
输出:
Running helpers from main1
helper1
helper2
Running helpers from main2
helper1
helper2
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
NameError: name 'helper1' is not defined