我意识到我无法从其__init__
方法中调用类的静态方法。
class c():
def __init__(self):
f()
@staticmethod
def f():
print("f called")
c()
给出一个NameError: name 'f' is not defined
。
为什么找不到静态方法?
答案 0 :(得分:1)
这仅仅是因为当您这样引用Python时,Python会在全局命名空间中搜索名为f
的函数。
要引用类的f
方法,您需要确保Python在适当的名称空间中查找。只需加上一个self.
。
class c():
def __init__(self):
self.f() # <-
@staticmethod
def f():
print("f called")
c()
产生
f called
答案 1 :(得分:0)
由于f()
是该类的方法,因此可以使用c.f()
或self.f()
来调用它
class c():
def __init__(self):
#Call static method using classname
c.f()
#Call static method using self
self.f()
@staticmethod
def f():
print("f called")
c()
然后输出将为
f called
f called
类似于在类外部调用静态方法,我们可以使用ClassName
或Instance
#Using classname to call f
c.f()
#Using instance to call f
c().f()
输出将为
f called
f called