Python面向对象的高级特性
一、類方法與靜態方法
類方法是類對象所擁有的方法,需要用修飾器一般以@classmethod來標識其為類方法,
1). 對于類方法,第一個參數必須是類對象,作為第一個參數
(cls是形參, 可以修改為其它變量名,但最好用’cls’了)
2). 能夠通過實例對象和類對象去訪問。
代碼運行結果:
二、property類屬性
一種用起來像是使用的實例屬性一樣的特殊屬性,可以對應于類的某個方法。
property屬性的定義和調用要注意一下幾點:
1.定義時,在實例方法的基礎上添加 @property 裝飾器;并且僅有一個self參數
2.調用時,無需括號
類屬性應用需求: 對于京東商城中顯示電腦主機的列表頁面,每次請求不可能把數據庫中的所有內容都顯示到頁面上,而是通過分頁的功能局部顯示,所以在向數據庫中請求數據時就要顯示的指定獲取從第m條到第n條的所有數據 這個分頁的功能包括:
- 根據用戶請求的當前頁和總數據條數計算出 m 和 n
- 根據m 和 n 去數據庫中請求數據
簡單實例:
三、單例模式
為什么使用單例模式?
對于系統中的某些類來說,只有一個實例很重要,例如,一個系統中可以存在多個打印任務,但是只能有一個正在工作的任務;一個系統只能有一個窗口管理器或文件系統;一個系統只能有一個計時工具或ID(序號)生成器。如在Windows中就只能打開一個任務管理器。如果不使用機制對窗口對象進行唯一化,將彈出多個窗口,如果這些窗口顯示的內容完全一致,則是重復對象,浪費內存資源;如果這些窗口顯示的內容不一致,則意味著在某一瞬間系統有多個狀態,與實際不符,也會給用戶帶來誤解,不知道哪一個才是真實的狀態。因此有時確保系統中某個對象的唯一性即一個類只能有一個實例非常重要。
class People(object):pass p1 = People() #object p2 = People() #object print(p1,p2) #每個對象的內存地址不同,所以肯定不是單例模式實現方法
裝飾器實現
裝飾器(decorator)可以動態地修改一個類或函數的功能。這里,我們也可以使用裝飾器來
裝飾某個類,使其只能生成一個實例,代碼如下
new方式實現
class People(object):_instance = Nonedef __new__(cls, *args, **kwargs):"""創建對象之前執行的內容"""if cls._instance is None:cls._instance = object.__new__(cls)return cls._instancedef __init__(self):"""在new方法之后執行, 將屬性和對象封裝在一起"""print("正在執行構造方法init......")p1 = People() p2 = People() print(p1, p2)總結:
""" 面向對象:1. 三大特性封裝(必須要掌握的):__new__: 在實例化對象之前執行的, 返回對象。__init__: 構造方法, 實例化對象時自動執行。 常用于將對象和屬性綁定在一起。self: 實質上是對象。繼承(最多知識點的):多繼承算法: python3中廣度優先算法。私有屬性和私有方法多態(最簡單的):2. 三大特性的應用1). 鏈表的封裝(Leetcode第二題)2). 棧的封裝3). 隊列的封裝4). 二叉樹的封裝與先序遍歷3. 高級特性1). @classmethod和@staticmethod(類方法和靜態方法)2). @property類屬性3). 單例模式: 一個類只能實例化一個對象基于裝飾器基于new方法 """總結
以上是生活随笔為你收集整理的Python面向对象的高级特性的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: python栈与队列的封装
- 下一篇: python 全部缩进一行_Python