參考:
函式的定義
class
python中的類沒有什麼public、private、protect
建構函式、析構函式
__init__(self)
__del__(self)
類的靜態變數
class student
name="abc"
這東西其實就是相當於c#中的靜態變數,但這裡要注意是,初始化類的靜態變數是這樣的(diveintopython中的例子)
class counter:
count = 0
def __init__(self):
self.__class__.count += 1
例項的成員變數
class student
def __init__(self)
self.name = "abc"
屬性定義(類從object繼承,但好像不是必須的,因為下面的**也可以正常使用)
class student:
def __init__(self):
self.__name="abc"
def getname(self):
return self.__name
def setname(self,value):
self.__name = value
def delname(self):
del self.__name
name = property(getname,setname,delname,'student name')
說實話,當我寫完這段**的時候,我就不想使用屬性了。這樣定義起來也太不方便了,還要從object中繼承。而且現在c#中,可以很簡單的通過get、set來實現屬性了。目前沒有找到好的理由使用屬性
唯讀屬性(類必須從object繼承,否則就不是唯讀的)
class parrot(object):
def __init__(self):
self._voltage = 100000
@property
def voltage(self):
"""get the current voltage."""
return self._voltage
私有變數
class student:
def __init__(self):
self.__name="abc"
很簡單就是通過__ 兩個下劃線開頭,但不是結尾的。就是私有了
私有方法
class student:
def __getage(self):
pass
和私有的變數一樣,你可以嘗試一下直接呼叫,編譯器會有相應的提示
強制訪問私有方法、變數
"私有"事實上這只是一種規則,我們依然可以用特殊的語法來訪問私有成員。
上面的方法,我們就可以通過_類名來訪問
aobj = student()
aobj._student__name
aobj._student__getage()
靜態方法
class class1:
@staticmethod
def test():
print "in static method..."
方法過載
python是不支援方法過載,但是你**了可以寫。python會使用位置在最後的乙個。我覺得這可能以python儲存這些資訊通過__dict__ 有關,它就是乙個dict。key是不能相同的。所以也就沒辦法出現兩個gogo 方法呼叫
class student:
def gogo(self,name):
print name
def gogo(self):
print "default"
呼叫的時候你只能使用 obj.gogo()這個方法。
一些特殊方法
__init__(self) 建構函式
__del__ (self) 析構函式
__repr__( self) repr()
__str__( self) print語句 或 str()
運算子過載
__lt__( self, other)
__le__( self, other)
__eq__( self, other)
__ne__( self, other)
__gt__( self, other)
__ge__( self, other)
這東西太多了。大家還是自己看python自帶幫助吧。
一些特殊屬性
當你定義乙個類和呼叫類的例項時可以獲得的一些預設屬性
class student:
'''this test class'''
name = 'ss'
def __init__(self):
self.name='bb'
def run(self):
'''people run'''
@staticmethod
def runstatic():
print "in static method..."
print student.__dict__ #類的成員資訊
print student.__doc__ #類的說明
print student.__name__ #類的名稱
print student.__module__ #類所在的模組
print student.__bases__ #類的繼承資訊
obj = student()
print dir(obj)
print obj.__dict__ #例項的成員變數資訊(不太理解python的這個模型,為什麼run這個函式確不再dict中)
print obj.__doc__ #例項的說明
print obj.__module__ #例項所在的模組
print obj.__class__ #例項所在的類名
Python物件導向學習筆記(二)
在使用面相物件開發前,應該首先分析需求,確定一下,程式中需要包含哪些類!在程式開發中,要設計乙個類,通常需要滿足一下三個要素 類名這類事物的名字,滿足大駝峰命名法屬性這類事物具有什麼樣的特徵 方法這類事物具有什麼樣的行為 capwords 每乙個單詞的首字母大寫 單詞與單詞之間沒有下劃線 名詞提煉法...
python學習(二) 物件導向
物件導向的方法簡介 類 class 方法重寫 override 繼承 例項化 類的方法必須要加乙個self引數 class classname def init self name salary self 是指類的例項而不是類 self name name 建立類物件 x class1 這是通過呼叫...
Python學習筆記 物件導向
物件導向 oop 基本概念 物件導向程式設計 object oriented programming簡寫 oop 1 物件導向基本概念 之前的學習程式設計方式就是面向過程的 面向過程和物件導向,是兩種不同的程式設計方式 對比面向過程的特點,可以更好的了解什麼是物件導向 2 過程和函式 科普 過程是最...