1. 一切皆对象
在python中不仅仅是类的实例是对象,包括类和函数也是对象。
2.函数对象
可以看看下面的outer 返回的是什么
def outer():
def inner():
return 10
return inner
func = outer()
print(func)
可以看出,func为一个函数对象:<function outer.<locals>.inner at 0x0000021BAFB4C620>。
并且这个函数对象是可以调用的。
def outer():
def inner():
return 10
return inner
func = outer()
print(func())
这个打印的结果为10。
我在这里觉得函数的调用是分三步的,
- 定义一个函数func对象
- 发现一个func对象
- 调用这个func()对象
3.descriptor
一个类中定义了__set__, __get__和__delete__中的一个或多个就是descriptor。
__get__函数定义的时候需要的参数为三个,分别为self, instance, owner。
__set__函数定义的时候需要的参数为三个,分别是self, instance, value。
可以通过一个例子来看看这三个参数分别是什么。
class A:
def __init__(self, val):
self.val = val
def __get__(self, instance, owner):
print('self is ', self)
print('instance is ', instance)
print('owner is ', owner)
return self.val
class B:
a = A(10)
b = B()
print(b.a)
打印的结果为:
self is <__main__.A o