Python 高階程式設計系列(01):一切皆物件
阿新 • • 發佈:2020-09-10
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