我有一個Python類MyClass
,方法do_something
。我希望這種方法有一個可選參數some_param
。到目前爲止,代碼如下所示:具有靜態和非靜態重載的類方法
class MyClass(object):
def __init__(self, some_param)
self.some_param = some_param
def do_something(some_param=None):
if some_param:
pass
else:
some_param = self.some_param
@staticmethod
def do_something_static(some_param):
pass
是有可能有do_something_static
和do_something
具有相同的名稱?
換句話說:
如果some_param
提供我想do_something
是一個靜態方法。
如果沒有提供some_param
,那麼它不會是一個靜態方法,因爲它需要訪問self.some_param
。
MyClass
需要同時具備這兩種功能,我希望將它們放在一個函數中,既可以作爲靜態方法也可以作爲非靜態方法調用:是否有可能?
爲什麼?我寧願沒有不同的功能做同樣的事情。 do_something_static
確實聽起來像「我不知道如何做得更好」。我問的是,如果可以通過靜態方法訪問self
,因爲如果使用替代self
的所需參數調用它,我不會那樣做。
不是真的,Python不支持基於簽名的多態/方法重載。 – jonrsharpe
*「是否可以在靜態方法中訪問自己」* - 否,如果您有權訪問'self',則它不是靜態的。你只能有一個給定名稱的方法(除非你做了一些手動的多派遣,例如用一個裝飾器,比如'@ property',即使這樣,我懷疑你會遇到試圖組合靜態和實例方法的問題)。 – jonrsharpe
我明白了,謝謝你的幫助! – Saturnix