一文看懂Python(六)-----类与对象篇
今天給大家介紹“對象”。眾所周知,Python是一門面向對象的編程語言,Python之所以如此強大,很大一部分原因也是因為Python中無處不對象,由此可知,學好Python的關鍵之一就是學好類與對象。好!步入正題。
一、什么是類、什么是對象
- 類的定義
一個類包括:- 1.屬性,描述的是類的靜態屬性
- 2.方法,描述的是類的動作- 對象的定義
- 對象的定義
通過類定義的數據結構實例,因此也被稱為實例對象。 - 小案例
二、類如何定義
class Stu:def __init__(self,numid,name,gender,loc):self.numid = numidself.name = nameself.gender = genderself.loc = locdef Print(self):print(self.numid,self.name,self.gender,self.loc) # 實例化 stu = Stu(1,'djk',1,'shandong') # 調用Print()函數 stu.Print()至于這里為什么有個self,可以看我另一篇文章,里面講解的非常清楚,這里就不詳細介紹了,而且還通過與Java語言做對比來理解self。深入理解Python中的self參數和__init__(self)方法–通過類比Java語言
三、面向對象的三大特征
3.1 封裝
對象就是一個封裝,將屬于對象的屬性和方法封裝成一個類,只允許對象自己在內部訪問!
3.2 繼承
- 繼承是子類自動共享父類之間數據和方法的機制
- 案例
- 如果子類中定義與父類同名的方法和屬性,則會自動覆蓋父類對應的屬性和方法
- 案例
3.3 多態
- 什么是多態呢?
多態就是方法名一樣,但是方法的實現方式不一樣 - 案例
四、什么是公有、什么是私有
-
類Class中成員變量有兩種屬性分別是:實例屬性和類屬性。
-
實例屬性是在構造函數中定義的(__init__),定義時候以self作為前綴。
-
類屬性是在類中方法之外但又在類之中定義的屬性。類屬性在所有實例之間共享。在類內部和類外部都可以通過"類.類屬性"來訪問。
兩者訪問形式:主程序中,實例屬性只能通過對象名訪問;而類屬性能夠通過類名訪問,也可以通過對象名訪問。
-
對于公有成員(方法和變量),可以公開使用,既可以在類內部訪問,也可以在類外部訪問。
-
對于私有成員(方法和變量),只能在類內部使用,但也可以通過特殊的方法進行訪問,即"對象名._類名+私有成員",book._Book__types。
- 兩者表現形式:類屬性定義時,如果以兩個短下滑線"__"開頭則表示是私有屬性,否則就是公有屬性。例如,self.size = s為私有屬性,而self.price = money為公有屬性。
私有方法:以兩個下滑線""開始,不能通過對象名直接調用。只能在屬于對象的方法中通過self調用。例如,self._namemethod
- 兩者表現形式:類屬性定義時,如果以兩個短下滑線"__"開頭則表示是私有屬性,否則就是公有屬性。例如,self.size = s為私有屬性,而self.price = money為公有屬性。
-
公有方法:通過對象名直接調用。例如,a.printLcs
-
靜態方法:可以通過類名和對象名調用,但不能直接訪問屬于對象的成員,只能訪問屬于類的成員。
五、一些相關的BIF
| issubclass(class,classinfo) | 如果class是classinfo的一個子類,返回True |
| isinstance(object,classinfo) | 檢查一個實例對象object是否是屬于classinfo類的 |
| hasattr(object,name) | 測試一個對象object是否有指定的屬性name |
| getattr(object,name[,default]) | 返回對象指定的屬性值,如果屬性不存在的話,,如果設置了default,則將default打印出來;否則會拋出一個AttributeError的異常 |
| setattr(object,name,value) | 設置對象中指定屬性的值,如果指定屬性不存在,會新建一個屬性并賦值 |
| delattr(object,name) | 刪除對象中指定屬性;如果指定屬性已經不存在,則會拋出一個AttributeError的異常 |
| property(fget = None,fset = None,fdel = None,fdoc = None) | 以自己定義好的屬性去設置屬性 |
六、類、類對象與實例對象的關系
class C:count = 0 a = C() b = C() c = C() print('a修改之前:{}'.format(a.count)) print('b修改之前:{}'.format(b.count)) print('c修改之前:{}'.format(c.count)) c.count += 10 # 修改的是實例對象c print('c修改實例對象之后:{}'.format(c.count)) # 我們修改類對象 C.count += 100 print('a修改之后:{}'.format(a.count)) print('a修改之后:{}'.format(b.count)) print('c修改類對象之后:{}'.format(c.count)) # 為什么會這樣呢?因為實例屬性將類屬性給覆蓋了,我們只能看到實例屬性,不能看到類屬性總結
以上是生活随笔為你收集整理的一文看懂Python(六)-----类与对象篇的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 2021年度抖音小红书美妆行业营销报告
- 下一篇: websocket python爬虫_p