有一个这样的写法
class Test:
def test_func(self):
pass
def __init__(self):
self.test = Test.test_func
if __name__ == "__main__":
t = Test()
t.test_func() # error
t.test()
Pycharm 已经傻掉了, 对于这段代码不会有任何错误提示,不过它运行起来是错误的
t.test()
TypeError: test_func() missing 1 required positional argument: 'self'
是不是意味着解释器只对对象所属类中的方法自动传递了一个 self 参数,而属于对象实例的方法并没有
1
zwzmzd 2019-05-19 16:29:41 +08:00 via Android 1
bounded method 和 unbounded method 了解一下
|
2
Wincer 2019-05-19 16:43:34 +08:00
t.test_func 这里的 t 就是定义 test_func 参数里的 self,它等同于 Test.test_func(t)。
|
3
lhx2008 OP |
4
Wincer 2019-05-19 16:54:42 +08:00 via Android
为什么你会认为对象作用域要比类(class)的高?对象的行为是由定义的,而且我已经说过了,test_func 这个函数就是定义在 Test 这个 class 上的,你可以 dir(Test) 查看一下它的属性
|
5
dinjufen 2019-05-20 10:16:25 +08:00
|