0
class A(object):
def __init__(self, val):
self.val = A.plus_one(val)
@staticmethod
def plus_one(val):
return val + 1
我們可以在一個類中定義一個靜態方法,並在任何地方使用它。我的問題是,即使我們在這個類中使用這個靜態方法,爲什麼我們必須命名空間靜態方法,也就是在方法名稱前面添加A.
。爲什麼我們在Python中命名空間staticmethod?
我的想法是,我們可以簡單地改變機制,使類中的靜態方法名不必是命名空間爲:(儘管Python不現在支持它):
class A(object):
def __init__(self, val):
self.val = plus_one(val)
@staticmethod
def plus_one(val):
return val + 1
我直覺是,因爲我們從班內呼喚,班級成員的優先級應高於全球職能,因此不會有任何含糊之處。爲什麼Python迫使我們命名空間呢?
Python不強制它。你也可以定義一個「裸」的功能。但是使用靜態方法允許組織代碼的附加層。 – Keith
@Keith我認爲你誤解了這個問題。這是關於調用靜態方法。 (我也很困惑。) –
三個想法:1)你怎麼可能調用同名的頂級方法? 2)你還必須使用'self.member()'而不是隻調用'member()'。 3)即使靜態方法可以被重載,所以'self.plus_one'和'A.plus_one'之間可能存在差異。應該調用哪個? –