Python的面向对象更加完全。python
函数和类也是对象,属于 python 的一等公民。app
类能够理解为模板,也是一个对象,能够动态修改他的属性。函数
一、赋值给一个变量
函数对象赋值给一个变量:code
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
二、能够添加到集合对象中it
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'>
三、能够做为参数传递给函数io
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()for循环
四、能够当作函数的返回值
函数能够返回一个函数,这是 python 装饰器的实现原理function
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