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
原文地址:https://www.cnblogs.com/bigband/p/13642988.html