python中一切皆是对象
python与其他语言有所不同,在python中,一切皆是对象。函数、类都是对象。
关于的一切皆对象更深入的学习,请借鉴AdvancePython-2.2type、object和class的关系
1.对象可以赋值给一个变量
将函数作为对象赋值给一个变量:
def ask(name="func "): #定义一个函数ask
print(name)
my_func = ask #将函数赋值给一个变量
my_func("func") #然后我们就可以把该变量当做函数来使用
运行结果:
将类作为一个对象赋值给一个变量:
class Person:
def __init__(self):
print("class")
my_class = Person
my_class() #把变量当做类来使用,去实例化类(自动调用__init__方法)
运行结果:
2.对象可以添加到集合对象中
如下,将上面定义的函数和 类添加到obj_list列表中
obj_list = []
obj_list.append(ask) #添加函数
obj_list.append(Person) #添加类
for item in obj_list: #遍历并输出
print(item())
运行结果:
注:
(1)func是函数内部自己打印的
(2)None是函数的返回值
(3)class是类内部自己打印的
(4)<main.Person object at---------------->是类对象的类型
3.对象可以作为参数传递给函数
def print_type(item):
print(type(item))
obj_list = []
obj_list.append(ask)
obj_list.append(Person)
for item in obj_list:
print_type(item) #将对象作为实参传递给print_type函数
运行结果:
4.对象可以当做函数的返回值
函数返回一个函数,这其实是python装饰器的原理。
def ask(name="func "):
print(name)
def decorator_func():
print("dec start")
return ask #返回ask函数
my_ask = decorator_func() #先调用decorator_func打印出"dec start"
my_ask("tom") #再调用my_ask打印出“tom”