【发布时间】:2020-06-29 14:06:31
【问题描述】:
class A:
def __init__(self):
self.name = None
self.a = 10
self.b = 20
self.c = 30
def func1(self, param1, param2):
def inner_func1(self, param1, param2):
print(self, self.a, self.b)
inner_func1(self, param1, param2)
a = A()
print(a)
a.func1(1,2)
我的第一个问题——将self 参数传递给类方法的嵌套函数是否合法?我在 python-3.5.2 上运行这段代码没有问题,print() 都显示相同的 A 类实例地址。然而python-3.6 在print(self, self.a, self.b) 上抱怨self 没有成员a。
另外有趣的是PyCharm IDE 没有在这一行突出显示self,并说它“超出了外部范围”。
我到底做错了什么?
【问题讨论】:
-
Python 3.6 运行这段代码对我来说很好。你确定这是 Python 错误,而不是 PyCharm 错误/警告?
-
实例方法的第一个参数的唯一特别之处(名称
self只是传统的,不是必需的)是您不必提供显式参数。描述符协议允许您编写a.func(1,2)而不是type(a).func(a, 1, 2)。
标签: python python-3.x python-class