python how to call static method from inside of a class body
本问题已经有最佳答案,请猛点这里访问。
假设我有一个带有静态方法的类,我希望将类属性设置为该方法返回的值:
1 2 3 4 5 6 | class A: @staticmethod def foo(): return 12 baz = foo() |
但是这样做我会得到一个错误:
1 2 3 4 | Traceback (most recent call last): File"<stdin>", line 1, in <module> File"<stdin>", line 5, in A TypeError: 'staticmethod' object is not callable |
我找到了解决这个问题的方法:
1 2 3 4 5 6 | class A: class B: @staticmethod def foo(): return 2 baz = B.foo() |
但例如,如果我写:
1 2 3 4 5 6 7 8 | class A: class B: @staticmethod def foo(): return 2 class C: baz = B.foo() |
我还得到一个错误:
1 2 3 4 5 | Traceback (most recent call last): File"<stdin>", line 1, in <module> File"<stdin>", line 6, in A File"<stdin>", line 7, in C NameError: name 'B' is not defined |
有没有一种方法可以在声明静态方法时从类内部调用它?为什么第一个和第三个代码示例不起作用,而第二个则起作用?Python解释器如何处理此类声明?
现在,在您的例子中,您希望在类节中调用它。通常这是不可能的,因为实例和类都不可用。然而,在任何情况下,
1 2 3 4 5 6 | class A: @staticmethod def foo(): return 12 baz = foo.__get__(None, object)() |
然后
1 2 | >>> A.baz 12 |
注:将
这也是一个解决方法,但可能会有所帮助。
在
1 2 3 4 5 6 7 8 9 | def add_baz(cls): cls.baz = cls.foo() return cls @add_baz class A: @staticmethod def foo(): return 12 |