python - 为什么绑定方法不能访问类中的外部函数?
问题描述
今天有件事让我很困惑。让我们假设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
为什么?
解决方案
在引用类的成员函数时尝试调用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
第一个参数,因为 astaticmethod
不调用或更改对象的任何其他成员。成员函数a
不被认为是一个staticmethod
,A
因为它调用b
了实例的另一个成员函数() self
。
(注: self
不是关键字,而是广泛使用的约定)。
推荐阅读
- python - 如何将此列表保存到 Python 中的文本文件
- java - 为什么我的程序不打印 txt 文件输入?
- google-apps-script - 我可以将脚本链接到已经有脚本的谷歌表格吗?
- java - 日志未显示在控制台中,也未使用 logback-spring.xml Spring boot slf4j 创建日志文件
- python - 如何在 python 中读取 *.bimg?
- python - 使用 telnet 检查远程 PC 的状态
- php - 如果语句无论如何执行,PHP 函数调用内部
- big-o - 回溯算法的空间复杂度
- python - Python:在带有按钮的函数中添加开/关功能
- testing - 单击表单保存按钮时,Test Cafe 测试一直无法重定向并给出 404