這是一種最佳實踐問題。覆蓋python中方法的內部函數
我有一個定義了一些方法的類結構。在某些情況下,我想覆蓋方法的特定部分。首先想到的是將我的方法分解爲更多的原子片段並覆蓋下面的相關部分。
class myTest(object):
def __init__(self):
pass
def myfunc(self):
self._do_atomic_job()
...
...
def _do_atomic_job(self):
print "Hello"
這是一個實用的方法來解決問題。但是由於我有太多的參數需要傳輸到_do_atomic_job()
,並且我不想傳遞和檢索大量的參數。其他選項是將這些參數設置爲self.param_var
等的類變量,但這些參數僅用於代碼的一小部分,使用self
不是我首選的解決方法。
最後一個選項我認爲是使用內部函數。 (我知道我會在變量的作用域問題,但正如我所說,這是一個最好的做法,不理會他們,認爲範圍和有關內部函數的所有事情都按預期工作)
class MyTest2(object):
mytext = ""
def myfunc(self):
def _do_atomic_job():
mytext = "Hello"
_do_atomic_job()
print mytext
讓我們假設作品如預期。我想要做的是覆蓋內部函數_do_atomic_job()
class MyTest3(MyTest2):
def __init__(self):
super(MyTest3, self).__init__()
self.myfunc._do_atomic_job = self._alt_do_atomic_job # Of course this do not work!
def _alt_do_atomic_job(self):
mytext = "Hollla!"
難道我想達到什麼是壓倒一切的繼承類的方法的內在功能_do_atomic_job
這可能嗎?
使用'namedtuples'看起來不錯。使用助手類看起來更漂亮,因爲它允許我將代碼拆分成類內的較小部分。 – FallenAngel