Python類(lèi)的基礎(chǔ)入門(mén)知識(shí)
更新時(shí)間:2008年11月24日 20:35:28 作者:
關(guān)于類(lèi)的定義
復(fù)制代碼 代碼如下:
class Account(object):
"一個(gè)簡(jiǎn)單的類(lèi)"
account_type="Basic"
def __init__(self,name,balance):
"初始化一個(gè)新的Account實(shí)例"
self.name=name
self.balance=balance
def deposit(self,amt):
"存款"
self.balance=self.balance+amt
def withdraw(self,amt):
"取款"
self.balance=self.balance-amt
def inquiry(self):
"返回當(dāng)前余額"
return self.balance
其中,__init__函數(shù)就是Python中的構(gòu)造函數(shù)。另外,balance這個(gè)變量是類(lèi)實(shí)例的變量。
另外,在python中類(lèi)中定義成員函數(shù)一般第一個(gè)參數(shù)總是self,表示自已的實(shí)例,與C++中的this指針差不多,不過(guò)C++中的this指針是隱函于其中并全局可見(jiàn)的,而在Python中卻要作為參數(shù)傳進(jìn)去, 這是Python中定義類(lèi)的另一個(gè)特點(diǎn)。
還有一個(gè)特點(diǎn),在類(lèi)的成員函數(shù)中,使用類(lèi)中的另一個(gè)成員函數(shù),前面必須要指定類(lèi)名,如下:
復(fù)制代碼 代碼如下:
class Foo(object):
def bar(self):
print "bar!"
def spam(self):
bar(self) # 錯(cuò)誤,引發(fā)NameError, 可以是:self.bar
Foo.bar(self) # 合法的
2.在類(lèi)中聲時(shí)靜態(tài)方法并使用靜態(tài)方法
要在類(lèi)中使用靜態(tài)方法,需在類(lèi)成員函數(shù)前面加上@staticmethod標(biāo)記符,以表示下面的成員函數(shù)是靜態(tài)函數(shù)。使用靜態(tài)方法的好處是,不需要定義實(shí)例即可使用這個(gè)方法:另外,多個(gè)實(shí)例共享此靜態(tài)方法,如下:
復(fù)制代碼 代碼如下:
class SimClass():
@staticmethod
def ShareStr():
print "This is a static Method"
SimClass.ShareStr() #使用靜態(tài)函數(shù)
3.類(lèi)方法:
類(lèi)方法與普通的成員函數(shù)和靜態(tài)函數(shù)有不同之處,在接觸的語(yǔ)言中好像也沒(méi)見(jiàn)過(guò)這種語(yǔ)義,看它的定義:
一個(gè)類(lèi)方法就可以通過(guò)類(lèi)或它的實(shí)例來(lái)調(diào)用的方法, 不管你是用類(lèi)來(lái)調(diào)用這個(gè)方法還是類(lèi)實(shí)例調(diào)用這個(gè)方法,該方法的第一個(gè)參數(shù)總是定義該方法的類(lèi)對(duì)象。
記住:方法的第一個(gè)參數(shù)都是類(lèi)對(duì)象而不是實(shí)例對(duì)象.
按照慣例,類(lèi)方法的第一個(gè)形參被命名為 cls. 任何時(shí)候定義類(lèi)方法都不是必須的(類(lèi)方法能實(shí)現(xiàn)的功能都可以通過(guò)定義一個(gè)普通函數(shù)來(lái)實(shí)現(xiàn),只要這個(gè)函數(shù)接受一個(gè)類(lèi)對(duì)象做為參數(shù)就可以了).
定義類(lèi)方法并使用類(lèi)方法:
復(fù)制代碼 代碼如下:
class ABase(object):
@classmethod #類(lèi)方法修飾符
def aclassmet(cls): print 'a class method for', cls.__name__
class ADeriv(ABase): pass
bInstance = ABase( )
dInstance = ADeriv( )
ABase.aclassmet( ) # prints: a class method for ABase
bInstance.aclassmet( ) # prints: a class method for ABase
ADeriv.aclassmet( ) # prints: a class method for ADeriv
dInstance.aclassmet( ) # prints: a class method for ADeriv
也就是說(shuō),類(lèi)方法并不是必須的,使用普通函數(shù)也可以實(shí)現(xiàn)類(lèi)方法的功能。
4.類(lèi)的繼承
在python中,繼承一個(gè)類(lèi),就像這樣:
class A(object) #繼承object類(lèi)
#.......
class B(A) #繼承A類(lèi)
#........
另外,python中支持多繼承,對(duì)于多繼承,找某個(gè)對(duì)應(yīng)的函數(shù),其python有相應(yīng)的方法,如:
復(fù)制代碼 代碼如下:
class D(oject): pass #D繼承自object
class B(D): #B是D的子類(lèi)
varB = 42
def method1(self):
print "Class B : method1"
class C(D): #C也是D的子類(lèi)
varC = 37
def method1(self):
print "Class C : method1"
def method2(self):
print "Class C : method2"
class A(B,C): #A是B和C的子類(lèi)
varA = 3.3
def method3(self):
print "Class A : method3"
如果我要調(diào)用A.method1() ,會(huì)出現(xiàn)什么結(jié)果?答案是ClassB:method1. 書(shū)上是只樣介紹的:
當(dāng)搜索在基類(lèi)中定義的某個(gè)屬性時(shí),Python采用深度優(yōu)先的原則、按照子類(lèi)定義中的基類(lèi)順序進(jìn)行搜索。**注意**(new-style類(lèi)已經(jīng)改變了這種行為)。上邊例子中,如果訪問(wèn) A.varB ,就會(huì)按照A-B-D-C-D這個(gè)順序進(jìn)行搜索,只要找到就停止搜索.若有多個(gè)基類(lèi)定義同一屬性的情況,則只使用第一個(gè)被找到屬性值:
5.數(shù)據(jù)隱藏
在python中實(shí)現(xiàn)數(shù)據(jù)隱藏很簡(jiǎn)單,不需要在前面加什么關(guān)鍵字,只要把類(lèi)變量名或成員函數(shù)前面加兩個(gè)下劃線即可實(shí)現(xiàn)數(shù)據(jù)隱藏的功能,這樣,對(duì)于類(lèi)的實(shí)例來(lái)說(shuō),其變量名和成員函數(shù)是不能使用的,對(duì)于其類(lèi)的繼承類(lèi)來(lái)說(shuō),也是隱藏的,這樣,其繼承類(lèi)可以定義其一模一樣的變量名或成員函數(shù)名,而不會(huì)引起命名沖突。
復(fù)制代碼 代碼如下:
class A:
def __init__(self):
self.__X = 3 # self._A__X
class B(A):
def __init__(self):
A.__init__(self)
self.__X = 37 # self._B__X
相關(guān)文章
Python學(xué)習(xí)之用pygal畫(huà)世界地圖實(shí)例
這篇文章主要介紹了Python學(xué)習(xí)之用pygal畫(huà)世界地圖實(shí)例,具有一定借鑒價(jià)值,需要的朋友可以參考下。2017-12-12
Python強(qiáng)化練習(xí)之Tensorflow2 opp算法實(shí)現(xiàn)月球登陸器
在面向?qū)ο蟪霈F(xiàn)之前,我們采用的開(kāi)發(fā)方法都是面向過(guò)程的編程(OPP)。面向過(guò)程的編程中最常用的一個(gè)分析方法是“功能分解”。我們會(huì)把用戶需求先分解成模塊,然后把模塊分解成大的功能,再把大的功能分解成小的功能,整個(gè)需求就是按照這樣的方式,最終分解成一個(gè)一個(gè)的函數(shù)2021-10-10
python解釋模型庫(kù)Shap實(shí)現(xiàn)機(jī)器學(xué)習(xí)模型輸出可視化
Shap 是一個(gè)開(kāi)源的 python 庫(kù),用于解釋模型。它可以創(chuàng)建多種類(lèi)型的可視化,有助于了解模型和解釋模型是如何工作的。在本文中,我們將會(huì)分享一些Shap創(chuàng)建的不同類(lèi)型的機(jī)器學(xué)習(xí)模型可視化2021-11-11
Python控制臺(tái)輸出時(shí)刷新當(dāng)前行內(nèi)容而不是輸出新行的實(shí)現(xiàn)
今天小編就為大家分享一篇Python控制臺(tái)輸出時(shí)刷新當(dāng)前行內(nèi)容而不是輸出新行的實(shí)現(xiàn),具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧2020-02-02

