日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > python >内容正文

python

python类介绍_python类介绍

發布時間:2025/4/16 python 33 豆豆
生活随笔 收集整理的這篇文章主要介紹了 python类介绍_python类介绍 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

一.類的定義--class關鍵字

1. 類是用來描述具有相同的屬性和方法的對象的集合。它定義了該集合中每個對象所共有的屬性和方法。對象是類的實例。使用class語句來創建一個新類,class之后為類的名稱(User)并以冒號結尾,類的組成包括成員變量(name,age)和成員函數(who),如下實例:class?User:

name='zhzhgo'

age=25

def?who(self):

print?"I'm?"+self.name

2.類屬性與方法

①類的私有屬性

__private_attrs:兩個下劃線開頭,聲明該屬性為私有,不能在類地外部被使用或直接訪問。在類內部的方法中使用時:self.__private_attrs。

②類的方法

在類地內部,使用def關鍵字可以為類定義一個方法,與一般函數定義不同,類方法必須包含參數self,且為第一個參數,如:who(self)。

③類的私有方法

__private_method:兩個下劃線開頭,聲明該方法為私有方法,不能在類的外部調用。在類的內部調用時: self.__private_methods。

注意:Python不允許實例化的類訪問私有數據,但可以使用 object._className__attrName 訪問屬性(下面代碼最后兩行):class?MyCounter:

__secretCount?=?0??#?私有變量

publicCount?=?0????#?公開變量

def?count(self):

self.__secretCount?+=?1

self.publicCount?+=?1

print?self.__secretCount

n?=?MyCounter()

n.count()

print?n.publicCount

#print?n.__secretCount??#?報錯,實例不能訪問私有變量

print?n._MyCounter__secretCount

3. 構造方法和析構方法

__init__()方法是一種特殊的方法,被稱為類的構造函數或初始化方法,當創建了這個類的實例時就會調用該方法。

__del__()被稱為類的析構函數,__del__在對象消逝的時候被調用,當對象不再被使用時,__del__方法運行。class?User(object):

"用戶類"

count=0

def?__init__(self,name,age):?#構造函數

self.name=name

self.age=age

User.count+=1

def?who(self):

print?"My?name?is?"+self.name+",I'm?"+str(self.age)+"?years?old."

def?__del__(self):?#析構函數

class_name?=?self.__class__.__name__

print?class_name,?"destroyed"

4. 創建實例對象

要創建一個類的實例,你可以使用類的名稱,并通過__init__方法接受參數,可以使用點(.)來訪問對象的屬性,類的幫助信息可以通過ClassName.__doc__查看。u1=User('zhzhgo',25)?#創建實例對象u1

u2=User('zz',18)?#創建實例對象u2

u1.who()?#訪問類方法

u2.who()

print?"Total?Object:"+str(User.count)

print?User.__doc__?#打印幫助信息

>>>

My name is zhzhgo,I'm 25 years old.

My name is zz,I'm 18 years old.

Total Object:2

用戶類

>>>

5.內置類屬性

__doc__ :類的文檔字符串

__name__: 類名

__module__: 類定義所在的模塊(類的全名是'__main__.className',如果類位于一個導入模塊mymod中,那么className.__module__ 等于 mymod)

__bases__ : 類的所有父類構成元素(包含了一個由所有父類組成的元組)

__dict__ : 類的屬性(包含一個字典,由類的數據屬性組成)print?"User.__doc__:",?User.__doc__

print?"User.__name__:",?User.__name__

print?"User.__module__:",?User.__module__

print?"User.__bases__:",?User.__bases__

print?"User.__dict__:",?User.__dict__

>>>

User.__doc__: 用戶類

User.__name__: User

User.__module__: __main__

User.__bases__: (,)

User.__dict__: {'count': 0, '__dict__': , '__module__': '__main__', '__del__': , 'who': , '__weakref__': , '__doc__': '\xe7\x94\xa8\xe6\x88\xb7\xe7\xb1\xbb', '__init__': }

>>>

6.對象銷毀(垃圾回收)

①同Java語言一樣,Python使用了引用計數這一簡單技術來追蹤內存中的對象。在Python內部記錄著所有使用中的對象各有多少引用。一個內部跟蹤變量,稱為一個引用計數器。當對象被創建時, 就創建了一個引用計數, 當這個對象不再需要時, 也就是說, 這個對象的引用計數變為0 時, 它被垃圾回收。但是回收不是"立即"的, 由解釋器在適當的時機,將垃圾對象占用的內存空間回收。

②垃圾回收機制不僅針對引用計數為0的對象,同樣也可以處理循環引用的情況。循環引用指的是,兩個對象相互引用,但是沒有其他變量引用他們。這種情況下,僅使用引用計數是不夠的。Python 的垃圾收集器實際上是一個引用計數器和一個循環垃圾收集器。作為引用計數的補充, 垃圾收集器也會留心被分配的總量很大(及未通過引用計數銷毀的那些)的對象。 在這種情況下, 解釋器會暫停下來, 試圖清理所有未引用的循環。

上述實例中如執行:del u1,則u1對象被銷毀,打印:User destroyed

二.類的繼承

面向對象的編程帶來的主要好處之一是代碼的重用,實現這種重用的方法之一是通過繼承機制。聲明類的時候括號中寫要繼承的父類。類的繼承衍生出類子類,子類可以繼承或重寫父類的方法,子類可以自定義新的方法或者成員變量,比如學生類可以繼承用戶類。class?User(object):

"用戶類"

def?__init__(self,name,age):?#構造函數

self.name=name

self.age=age

def?who(self):

print?"My?name?is?"+self.name+",I'm?"+str(self.age)+"?years?old."

class?Student(User):

"學生類繼承用戶類"

def?__init__(self,name,age,height):

User.__init__(self,name,age)

self.height=height

def?who(self):

User.who(self)

#super(Student,self).who()

print?"My?height?is?"+?str(self.height)

Student("zhzhgo",25,168).who()

>>>

My name is zhzhgo,I'm 25 years old.

My height is 168

>>>

在python中繼承的特點:

1. 在繼承中基類的構造(__init__()方法)不會被自動調用,它需要在其派生類的構造中親自專門調用。

2. 在調用基類的方法時,需要加上基類的類名前綴,且需要帶上self參數變量。區別于在類中調用普通函數時并不需要帶上self參數。

3. Python總是首先查找對應類型的方法,如果它不能在派生類中找到對應的方法,它才開始到基類中逐個查找。(先在本類中查找調用的方法,找不到才去基類中找)。

4. 如果父類中有相同的方法名,而在子類使用時未指定,python從左至右搜索,即方法在子類中未找到時,從左到右查找父類中是否包含該方法。如果在繼承元組中列了一個以上的類,那么它就被稱作"多重繼承" (繼承嵌套)class?類名(父類1,父類2,....,父類n)

三.實例方法、類方法、靜態方法

實例方法,類方法,靜態方法都可以通過實例或者類調用,只不過實例方法通過類調用時需要傳遞實例的引用(python 3可以傳遞任意對象,其他版本會報錯)

實例方法針對的是實例,第一個參數是self,普通對象方法至少需要一個self參數,代表類對象實例;類方法針對的是類,@classmethod 它表示接下來的是一個類方法,類方法的第一個參數cls,它們都可以繼承和重新定義;靜態方法用于作為程序中的共享資源,直接通過類去調用,不用實例化對象,不需要self參數,可以認為是全局函數,@staticmethod 它表示接下來的是一個靜態方法class?Test1(object):

def?test1(self):?#定義了實例方法

print("object")

@classmethod

def?test2(cls):?#定義了類方法

print("class")

@staticmethod

def?test3():?#定義了靜態方法

print("static")

f1=Test1()

#f1.test1();?#通過實例調用

Test1.test1(f1)?#直接通過類的方式調用,但是需要自己傳遞實例引用

Test1.test2()

print?"--------------------"

#如果Test1有子類,并且子類覆蓋了這個類方法,最終會調用子類的方法并傳遞子類的類對象

class?Test2(Test1):

@classmethod

def?test2(cls):

print(cls)

print("test2?object")

f2=Test2()

f2.test2()

print?"--------------------"

f1.test3();?#使用實例調用

Test1.test3();?#直接靜態方式調用

>>>

object

class

--------------------

test2 object

--------------------

static

static

>>>

總結

以上是生活随笔為你收集整理的python类介绍_python类介绍的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。