亚洲区国产区激情区无码区,国产成人mv视频在线观看,国产A毛片AAAAAA,亚洲精品国产首次亮相在线

Python 基礎(chǔ)教程

Python 流程控制

Python 函數(shù)

Python 數(shù)據(jù)類型

Python 文件操作

Python 對象和類

Python 日期和時間

Python 高級知識

Python 參考手冊

Python中的類和對象是什么?

Python是一種面向?qū)ο蟮木幊陶Z言。與面向過程的程序設(shè)計主要側(cè)重于函數(shù),面向?qū)ο蟮某绦蛟O(shè)計著重于對象。

對象只是數(shù)據(jù)(變量)和作用于這些數(shù)據(jù)的方法(函數(shù))的集合。并且,類是對象的藍(lán)圖。

我們可以將類視為房子的草圖(原型)。它包含有關(guān)地板,門,窗戶等的所有詳細(xì)信息?;谶@些描述,我們建造了房屋。房子是對象。

由于可以通過描述來制作許多房屋,因此我們可以根據(jù)類創(chuàng)建許多對象。對象也稱為類的示例,創(chuàng)建該對象的過程稱為示例化

在Python中定義一個類

就像函數(shù)定義以關(guān)鍵字def開頭一樣,在Python中,我們使用關(guān)鍵字class定義了一個。

第一個字符串稱為docstring,并具有有關(guān)該類的簡短說明。盡管不是強制性的,但是建議這樣做。

這是一個簡單的類定義。

class MyNewClass:
    '''這是一個文檔字符串。我已經(jīng)創(chuàng)建了一個新類'''
    pass

一個類創(chuàng)建一個新的本地命名空間,并在其中定義其所有屬性。屬性可以是數(shù)據(jù)或函數(shù)。

其中還有一些特殊屬性,它們以雙下劃線(__)開頭。例如,__doc__給我們該類的文檔字符串。

一旦定義了一個類,就會創(chuàng)建一個具有相同名稱的新類對象。這個類對象使我們可以訪問不同的屬性以及示例化該類的新對象。

class MyClass:
	"這是我的第二個類"
	a = 10
	def func(self):
		print('Hello')

# 輸出: 10
print(MyClass.a)

# 輸出: <function MyClass.func at 0x0000000003079BF8>
print(MyClass.func)

# 輸出: '這是我的第二個類'
print(MyClass.__doc__)

運行該程序時,輸出為:

10
<function 0x7feaa932eae8="" at="" myclass.func="">
這是我的第二個類

用Python創(chuàng)建對象

我們看到了類對象可用于訪問不同的屬性。

它也可以用于創(chuàng)建該類的新對象示例(示例化)。創(chuàng)建對象的過程類似于函數(shù)調(diào)用。

>>> ob = MyClass()

這將創(chuàng)建一個新的示例對象ob。我們可以使用對象名稱前綴來訪問對象的屬性。

屬性可以是數(shù)據(jù)或方法。對象的方法是該類的相應(yīng)函數(shù)。任何作為類屬性的函數(shù)對象都為該類的對象定義了一種方法。

這意味著,由于MyClass.func是函數(shù)對象(類的屬性),因此ob.func將成為方法對象。

class MyClass:
	"這是我的第二個類"
	a = 10
	def func(self):
		print('Hello')

# 創(chuàng)建一個新的MyClass
ob = MyClass()

# 輸出: <function MyClass.func at 0x000000000335B0D0>
print(MyClass.func)

# 輸出: <bound method MyClass.func of <__main__.MyClass object at 0x000000000332DEF0>>
print(ob.func)

# Calling function func()
# 輸出: Hello
ob.func()

您可能已經(jīng)注意到了類內(nèi)部函數(shù)定義中的self參數(shù),但是,我們只是將該方法簡稱為ob.func(),沒有任何參數(shù)。它仍然有效。

這是因為,只要對象調(diào)用其方法,該對象本身就會作為第一個參數(shù)傳遞。因此,ob.func()自動轉(zhuǎn)成MyClass.func(ob)。

通常,調(diào)用帶有n個參數(shù)列表的方法等效于調(diào)用帶有參數(shù)列表的函數(shù),該參數(shù)列表是通過在第一個參數(shù)之前插入方法的對象而創(chuàng)建的。

由于這些原因,類中函數(shù)的第一個參數(shù)必須是對象本身。這通常稱為self。可以使用其他名稱,但我們強烈建議您遵循約定。

現(xiàn)在,您必須熟悉類對象,示例對象,函數(shù)對象,方法對象及其區(qū)別。

Python中的構(gòu)造函數(shù)

以雙下劃線(__)開頭的類函數(shù)被稱為特殊函數(shù),因為它們具有特殊含義。

__init__()函數(shù)特別有用。每當(dāng)示例化該類的新對象時,都會調(diào)用此特殊函數(shù)。

這種類型的函數(shù)在面向?qū)ο缶幊?OOP)中也稱為構(gòu)造函數(shù)。我們通常使用它來初始化所有變量。

class ComplexNumber:
    def __init__(self,r = 0,i = 0):
        self.real = r
        self.imag = i

    def getData(self):
        print("{0}+{1}j".format(self.real,self.imag))

# 創(chuàng)建一個新的ComplexNumber對象
c1 = ComplexNumber(2,3)

# 調(diào)用getData()函數(shù)
# 輸出: 2+3j
c1.getData()

# 創(chuàng)建另一個ComplexNumber對象
# 并創(chuàng)建一個新的屬性“attr”
c2 = ComplexNumber(5)
c2.attr = 10

# 輸出: (5, 0, 10)
print((c2.real, c2.imag, c2.attr))

# 但c1對象沒有屬性" attr "
# AttributeError: 'ComplexNumber'對象沒有屬性'attr'
c1.attr

在上面的示例中,我們定義了一個新類來表示復(fù)數(shù)。它具有兩個函數(shù),以 __init__() 初始化變量(默認(rèn)為零),getData()用來正確顯示數(shù)字。

在上述步驟中需要注意的一件有趣的事情是,可以動態(tài)地創(chuàng)建對象的屬性。我們?yōu)閷ο骳2創(chuàng)建了一個新的屬性attr,并讀取它。但這并沒有為對象c1創(chuàng)建該屬性。

刪除屬性和對象

可以使用del語句隨時刪除對象的任何屬性。在Python Shell上嘗試以下操作以查看輸出。

>>> c1 = ComplexNumber(2,3)
>>> del c1.imag
>>> c1.getData()
Traceback (most recent call last):
...
AttributeError: 'ComplexNumber' object has no attribute 'imag'

>>> del ComplexNumber.getData
>>> c1.getData()
Traceback (most recent call last):
...
AttributeError: 'ComplexNumber' object has no attribute 'getData'

我們甚至可以使用del語句刪除對象本身。

>>> c1 = ComplexNumber(1,3)
>>> del c1
>>> c1
Traceback (most recent call last):
...
NameError: name 'c1' is not defined

實際上,它比這更復(fù)雜。完成后,將在內(nèi)存中創(chuàng)建一個新的示例對象 c1 = ComplexNumber(1,3),名稱c1與 其綁定。

命令del c1,將刪除此綁定,并從相應(yīng)的名稱空間中刪除名稱c1。但是,該對象繼續(xù)存在于內(nèi)存中,如果沒有其他名稱綁定,則該對象以后會自動銷毀。

在Python中這種對未引用對象的自動銷毀也稱為垃圾回收。

在Python中刪除對象