初始化运行时静态方法不可用

时间:2019-05-06 14:30:46

标签: python initialization static-methods

我意识到我无法从其__init__方法中调用类的静态方法。

class c():

    def __init__(self):
        f()

    @staticmethod
    def f():
        print("f called")

c()

给出一个NameError: name 'f' is not defined

为什么找不到静态方法?

2 个答案:

答案 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

类似于在类外部调用静态方法,我们可以使用ClassNameInstance

#Using classname to call f
c.f()

#Using instance to call f
c().f()

输出将为

f called
f called