首页 > 解决方案 > 为什么绑定方法不能访问类中的外部函数?

问题描述

今天有件事让我很困惑。让我们假设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))

然后当我访问函数ba我会遇到错误:NameError: name 'b' is not defined. 不能b在方法内部访问函数ab和都是c函数,只能c在里面访问。a为什么?

标签: pythonscope

解决方案


在引用类的成员函数时尝试调用self.b()而不是。每个实例都是一个唯一的对象,实例的成员和属性可以使用.b() bAAself

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第一个参数,因为 astaticmethod 调用或更改对象的任何其他成员。成员函数a 被认为是一个staticmethodA因为它调用b了实例的另一个成员函数() self

注: self不是关键字,而是广泛使用的约定)。


推荐阅读