Python類的基礎入門知識
程式碼如下:
class Account(object):
"一個簡單的類"
account_type="Basic"
def __init__(self,name,balance):
"初始化一個新的Account例項"
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):
"返回當前餘額"
return self.balance
其中,__init__函式就是Python中的建構函式。另外,balance這個變數是類例項的變數。
另外,在python中類中定義成員函式一般第一個引數總是self,表示自已的例項,與C++中的this指標差不多,不過C++中的this指標是隱函於其中並全域性可見的,而在Python中卻要作為引數傳進去, 這是Python中定義類的另一個特點。
還有一個特點,在類的成員函式中,使用類中的另一個成員函式,前面必須要指定類名,如下:
class Foo(object):
def bar(self):
print "bar!"
def spam(self):
bar(self) # 錯誤,引發NameError, 可以是:self.bar
Foo.bar(self) # 合法的
2.在類中聲時靜態方法並使用靜態方法
要在類中使用靜態方法,需在類成員函式前面加上@staticmethod標記符,以表示下面的成員函式是靜態函式。使用靜態方法的好處是,不需要定義例項即可使用這個方法:另外,多個例項共享此靜態方法,如下:
class SimClass():
@staticmethod
def ShareStr():
print "This is a static Method"
SimClass.ShareStr() #使用靜態函式
3.類方法:
類方法與普通的成員函式和靜態函式有不同之處,在接觸的語言中好像也沒見過這種語義,看它的定義:
一個類方法就可以通過類或它的例項來呼叫的方法, 不管你是用類來呼叫這個方法還是類例項呼叫這個方法,該方法的第一個引數總是定義該方法的類物件。
記住:方法的第一個引數都是類物件而不是例項物件.
按照慣例,類方法的第一個形參被命名為 cls. 任何時候定義類方法都不是必須的(類方法能實現的功能都可以通過定義一個普通函式來實現,只要這個函式接受一個類物件做為引數就可以了).
定義類方法並使用類方法:
class ABase(object):
@classmethod #類方法修飾符
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
也就是說,類方法並不是必須的,使用普通函式也可以實現類方法的功能。
4.類的繼承
在python中,繼承一個類,就像這樣:
class A(object) #繼承object類
#.......
class B(A) #繼承A類
#........
另外,python中支援多繼承,對於多繼承,找某個對應的函式,其python有相應的方法,如:
class D(oject): pass #D繼承自object
class B(D): #B是D的子類
varB = 42
def method1(self):
print "Class B : method1"
class C(D): #C也是D的子類
varC = 37
def method1(self):
print "Class C : method1"
def method2(self):
print "Class C : method2"
class A(B,C): #A是B和C的子類
varA = 3.3
def method3(self):
print "Class A : method3"
如果我要呼叫A.method1() ,會出現什麼結果?答案是ClassB:method1. 書上是隻樣介紹的:
當搜尋在基類中定義的某個屬性時,Python採用深度優先的原則、按照子類定義中的基類順序進行搜尋。**注意**(new-style類已經改變了這種行為)。上邊例子中,如果訪問 A.varB ,就會按照A-B-D-C-D這個順序進行搜尋,只要找到就停止搜尋.若有多個基類定義同一屬性的情況,則只使用第一個被找到屬性值:
5.資料隱藏
在python中實現資料隱藏很簡單,不需要在前面加什麼關鍵字,只要把類變數名或成員函式前面加兩個下劃線即可實現資料隱藏的功能,這樣,對於類的例項來說,其變數名和成員函式是不能使用的,對於其類的繼承類來說,也是隱藏的,這樣,其繼承類可以定義其一模一樣的變數名或成員函式名,而不會引起命名衝突。
class A:
def __init__(self):
self.__X = 3 # self._A__X
class B(A):
def __init__(self):
A.__init__(self)
class Account(object):
"一個簡單的類"
account_type="Basic"
def __init__(self,name,balance):
"初始化一個新的Account例項"
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):
"返回當前餘額"
return self.balance
其中,__init__函式就是Python中的建構函式。另外,balance這個變數是類例項的變數。
另外,在python中類中定義成員函式一般第一個引數總是self,表示自已的例項,與C++中的this指標差不多,不過C++中的this指標是隱函於其中並全域性可見的,而在Python中卻要作為引數傳進去, 這是Python中定義類的另一個特點。
還有一個特點,在類的成員函式中,使用類中的另一個成員函式,前面必須要指定類名,如下:
複製程式碼 程式碼如下:
class Foo(object):
def bar(self):
print "bar!"
def spam(self):
bar(self) # 錯誤,引發NameError, 可以是:self.bar
Foo.bar(self) # 合法的
2.在類中聲時靜態方法並使用靜態方法
要在類中使用靜態方法,需在類成員函式前面加上@staticmethod標記符,以表示下面的成員函式是靜態函式。使用靜態方法的好處是,不需要定義例項即可使用這個方法:另外,多個例項共享此靜態方法,如下:
複製程式碼 程式碼如下:
class SimClass():
@staticmethod
def ShareStr():
print "This is a static Method"
SimClass.ShareStr() #使用靜態函式
3.類方法:
類方法與普通的成員函式和靜態函式有不同之處,在接觸的語言中好像也沒見過這種語義,看它的定義:
一個類方法就可以通過類或它的例項來呼叫的方法, 不管你是用類來呼叫這個方法還是類例項呼叫這個方法,該方法的第一個引數總是定義該方法的類物件。
記住:方法的第一個引數都是類物件而不是例項物件.
按照慣例,類方法的第一個形參被命名為 cls. 任何時候定義類方法都不是必須的(類方法能實現的功能都可以通過定義一個普通函式來實現,只要這個函式接受一個類物件做為引數就可以了).
定義類方法並使用類方法:
複製程式碼 程式碼如下:
class ABase(object):
@classmethod #類方法修飾符
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
也就是說,類方法並不是必須的,使用普通函式也可以實現類方法的功能。
4.類的繼承
在python中,繼承一個類,就像這樣:
class A(object) #繼承object類
#.......
class B(A) #繼承A類
#........
另外,python中支援多繼承,對於多繼承,找某個對應的函式,其python有相應的方法,如:
複製程式碼 程式碼如下:
class D(oject): pass #D繼承自object
class B(D): #B是D的子類
varB = 42
def method1(self):
print "Class B : method1"
class C(D): #C也是D的子類
varC = 37
def method1(self):
print "Class C : method1"
def method2(self):
print "Class C : method2"
class A(B,C): #A是B和C的子類
varA = 3.3
def method3(self):
print "Class A : method3"
如果我要呼叫A.method1() ,會出現什麼結果?答案是ClassB:method1. 書上是隻樣介紹的:
當搜尋在基類中定義的某個屬性時,Python採用深度優先的原則、按照子類定義中的基類順序進行搜尋。**注意**(new-style類已經改變了這種行為)。上邊例子中,如果訪問 A.varB ,就會按照A-B-D-C-D這個順序進行搜尋,只要找到就停止搜尋.若有多個基類定義同一屬性的情況,則只使用第一個被找到屬性值:
5.資料隱藏
在python中實現資料隱藏很簡單,不需要在前面加什麼關鍵字,只要把類變數名或成員函式前面加兩個下劃線即可實現資料隱藏的功能,這樣,對於類的例項來說,其變數名和成員函式是不能使用的,對於其類的繼承類來說,也是隱藏的,這樣,其繼承類可以定義其一模一樣的變數名或成員函式名,而不會引起命名衝突。
複製程式碼 程式碼如下:
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
文章來源http://www.jb51.net/article/16582.htm
相關文章
- Python入門必知的知識點!Python基礎入門Python
- Python基礎知識入門(二)Python
- Python入門基礎知識(二)Python
- Python入門基礎知識例項,Python
- Python入門之基礎知識(一)Python
- JavaScript 基礎知識入門JavaScript
- MySql入門--基礎知識MySql
- css 入門基礎知識CSS
- Python 基礎(一):入門必備知識Python
- Python入門基礎知識學什麼?Python
- Python快速入門之基礎知識(一)Python
- JavaScript入門①-基礎知識築基JavaScript
- Python基礎入門知識點——Python中的異常Python
- sql入門基礎知識分享SQL
- Dubbo基礎入門知識點
- Java基礎知識入門-JDKJavaJDK
- Java入門基礎知識點Java
- Python基礎入門知識點——if 語句簡介Python
- Python基礎入門知識點——深淺拷貝Python
- Python培訓入門基礎知識學什麼?Python
- Linux驅動入門基礎基礎知識Linux
- 【LaTeX入門】01、LaTeX基礎知識
- oracle架構的基礎知識(入門級)Oracle架構
- [WebGL入門]五,矩陣的基礎知識Web矩陣
- OpenSSL 入門:密碼學基礎知識密碼學
- WebSocket系列之基礎知識入門篇Web
- Android NDK入門:C++ 基礎知識AndroidC++
- 爬蟲開發知識入門基礎(1)爬蟲
- Altium Designer 20 入門基礎知識(5)
- Altium Designer 20 入門基礎知識(1)
- python 基礎知識Python
- python基礎知識Python
- 好程式設計師Python培訓分享Python入門基礎知識程式設計師Python
- 零基礎入門學習Python爬蟲必備的知識點!Python爬蟲
- [基礎入門]網路安全知識問答(二)!
- Pwn入門筆記(二)a little棧基礎知識筆記
- 系統架構基礎知識入門指南-下架構
- 系統架構基礎知識入門指南-上架構