1. 程式人生 > 實用技巧 >Python 高階程式設計系列(01):一切皆物件

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