今天有些事让我很困惑。
我们假设foo.py
:
class A:
def a(self):
b()
#c()
@staticmethod
def b():
print("b called!")
def c():
print("c called!")
a=A()
a.a()
print(a.a)
print(type(A.b))
print(type(c))
然后当我访问b
中的函数a
时,我会遇到错误:NameError: name 'b' is not defined
。
可以在方法b
内访问a
函数吗? b
和c
都是函数,c
内只能访问a
。为什么?
答案 0 :(得分:1)
在引用班级self.b()
的成员函数 b()
时,请尝试拨打b
而不是A
。 A
的每个实例都是唯一对象,可以使用self
引用实例的成员和属性。
class A:
def a(self):
self.b()
c()
@staticmethod
def b():
print("b called!")
def c():
print("c called!")
我们可以在不使用c
的情况下引用self.c()
,因为它不是A
的成员。成员函数b
不将self
作为第一个参数,因为staticmethod
不致电或更改任何其他成员对象。成员函数a
不被视为staticmethod
的{{1}},因为它调用了实例{{1}的另一个成员函数(A
) }。
(注意: b
不是关键字,而是广泛使用的约定。
答案 1 :(得分:0)
我认为这是因为b
是类A
的静态方法,而不仅仅是外部范围的函数。必须使用以下语法访问它:
A.b()