Python 高级编程系列__01:一切皆对象
Python的面向对象更加彻底。
函数和类也是对象,属于 python 的一等公民。
类可以理解为模板,也是一个对象,可以动态修改他的属性。
1、赋值给一个变量
函数对象赋值给一个变量:
def ask(name="baby",age=3):
print(name, age)
my_func = ask
my_func("Bob",18)
输出结果:
Bob 18
类对象赋值给一个变量:
#类对象赋值给一个变量
class Person:
def __init__(self):
print("Person class")
my_class = Person
my_class()
输出:
Person class
2、可以添加到集合对象中
def ask(name="baby",age=3):
print(name, age)
class Person:
def __init__(self):
print("Person class")
obj_list = []
obj_list.append(ask)
obj_list.append(Person)
for item in obj_list:
print(item)
输出:
<function ask at 0x106e320d0>
<class '__main__.Person'>
3、可以作为参数传递给函数
def ask(name="baby",age=3):
print(name, age)
class Person:
def __init__(self):
print("Person class")
obj_list = []
obj_list.append(ask)
obj_list.append(Person)
for item in obj_list:
print(item())
输出:
baby 3
None
Person class
<__main__.Person object at 0x109f0d978>
解释:
baby 3 : ask 函数实例化后打印出来的结果
None:ask 函数没有返回值
Person class:Person 类的 print 打印的结果
<__main__.Person object at 0x109f0d978>:对象的返回值是一个 Person object
注意和上面例子的区别在于:
for循环的print函数,对 item 做了实例化:item()
4、可以当做函数的返回值
函数可以返回一个函数,这是 python 装饰器的实现原理
def ask(name="baby",age=3):
print(name, age)
def decorator_func():
print("desc start")
return ask
my_ask= decorator_func()
my_ask("Tom",21)
输出:
desc start
Tom 21