为什么绑定方法不能访问类中的外部函数?

时间:2018-05-01 09:01:49

标签: python scope

今天有些事让我很困惑。 我们假设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函数吗? bc都是函数,c内只能访问a。为什么?

2 个答案:

答案 0 :(得分:1)

在引用班级self.b()成员函数 b()时,请尝试拨打b而不是AA的每个实例都是唯一对象,可以使用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()