TOP

python類及其方法(一)
2017-09-30 16:41:47 】 瀏覽:10289
Tags:

                 python類及其方法

一、介紹

Python 中,面向對象編程主要有兩個主題,就是類和類實例
類與實例:
類與實例相互關聯著:類是對象的定義,而實例是"真正的實物",它存放了類中所定義的對象
的具體信息。

類有這樣一些的優點:

1、類對象是多態的:也就是多種形態,這意味著我們可以對不同的類對象使用同樣的操作方法,而不需要額外寫代碼。
2、類的封裝:封裝之后,可以直接調用類的對象,來操作內部的一些類方法,不需要讓使用者看到代碼工作的細節。
3、類的繼承:類可以從其它類或者元類中繼承它們的方法,直接使用。

二、類的定義

1.定義類(class)的語法

1 >>> class Iplaypython:
2 >>>     def fname(self, name):
3 >>>           self.name = name

一第行,語法是class 后面緊接著,類的名字,最后別忘記“冒號”优乐棋牌app下载,這樣來定義一個類。
類的名字,首字母,有一個不可文的規定,是大寫,這樣需要在代碼中識別區分每個類。
第二行開始是類的方法,大家看到了,和函數非常相似,但是與普通函數不同的是,它的內部有一個“self”,參數优乐棋牌app下载,它的作用是對于對象自身的引用。

2.初始化對象

創建類時,可以定義一個特定的方法,名為__init__(),只要創建這個類的一個實例就會運行這個方法。可以向__init__()方法傳遞參數优乐棋牌app下载,這樣創建對象時就可以把屬性設置為你希望的值__init__()這個方法會在創建對象時完成初始化

1 >>> class peo:
2 ...     def __init__(self,name,age,sex):
3 ...             self.Name = name
4 ...             self.Age = age
5 ...             self.Sex = sex
6 ...     def speak(self):
7 ...             print "my name" + self.Name
8 ... 

實例化這個類的對象時:

1 >>> zhangsan=peo("zhangsan",24,'man')
2 >>> print zhangsan.Age
3 24
4 >>> print zhangsan.Name
5 zhangsan
6 >>> print zhangsan.Sex
7 man

之前多次用到self這個形參類就好比是一張藍圖,使用一個類可以創建多個對象實例,speak()方法在被調用時,必須知道是哪個對象調用了它.

這里self參數优乐棋牌app下载就會告訴方法是哪個對象來調用的.這稱為實例引用。

 

3.類的私有屬性:

  __private_attrs 兩個下劃線開頭,聲明該屬性為私有,不能在類地外部被使用或直接訪問。在類內部的方法中使用時 self.__private_attrs
類的方法
  在類地內部,使用def關鍵字可以為類定義一個方法,與一般函數定義不同,類方法必須包含參數优乐棋牌app下载self,且為第一個參數优乐棋牌app下载
私有的類方法
  __private_method 兩個下劃線開頭,聲明該方法為私有方法,不能在類地外部調用。在類的內部調用slef.__private_methods

 

4. classmethod類方法

1) 在python中.類方法 @classmethod 是一個函數修飾符,它表示接下來的是一個類方法,而對于平常我們見到的則叫做實例方法。 類方法的第一個參數优乐棋牌app下载cls,而實例方法的第一個參數优乐棋牌app下载是self,表示該類的一個實例。
2) 普通對象方法至少需要一個self參數优乐棋牌app下载,代表類對象實例
3)類方法有類變量cls傳入,從而可以用cls做一些相關的處理。并且有子類繼承時,調用該類方法時,傳入的類變量cls是子類,而非父類。 對于類方法,可以通過類來調用,就像C.f(),有點類似C++中的靜態方法, 也可以通過類的一個實例來調用,就像C().f(),這里C(),寫成這樣之后它就是類的一個實例了。

 1 class info(object):
 2 
 3   @classmethod
 4   def sayclassmethod(cls):
 5 
 6     print 'say %s' % cls
 7 
 8   def saymethod(self):
 9 
10     print 'say %s' % self
11 
12 
13 test = info()
14 test.saymethod()##實例調用方法
15 test.sayclassmethod()##實例調用類方法
16 info.saymethod(test)##類調用實例方法
17 info.sayclassmethod()##類調用類方法

大家對比運行下。

 

5.類的裝飾器@property

 1 class Pager:
 2     def __init__(self,all_count):
 3         self.all_count=all_count
 4     @property
 5     def all_pager(self):
 6         a,b=divmod(self.all_count,10)
 7         if a==0:
 8             return a
 9         else:
10             return  a+1
11 
12     @all_pager.setter
13     def all_pager(self,value):
14         print(value)
15 
16     @all_pager.deleter
17     def all_pager(self):
18         print('hehe')
19 p=Pager(101)
20 ret=p.all_count#以訪問類屬性的方法訪問對象的方法
21 print(ret)

下面看第二種方法

 1 class Pager:
 2     def __init__(self,all_count):
 3         self.all_count=all_count
 4     def f1(self):
 5         return 123
 6     def f2(self,value):
 7         print('======')
 8     def f3(self):
 9         print('+++++++')
10 
11     foo=property(fget=f1,fset=f2,fdel=f3)
12 p=Pager(101)
13 ret=p.foo
14 p.foo='alex'
15 print(p.foo)
16 del p.foo

在該類中定義三個函數优乐棋牌app下载,分別用作賦值、取值、刪除變量

property函數原型為property(fget=None,fset=None,fdel=None,doc=None),上例根據自己定義相應的函數賦值即可。

 

 

三、繼承類定義:
1.單繼承

class <類名>(父類名)
<語句>

1 class childbook(book)
2     age = 10

#單繼承示例

 1  class student(people):  
 2         grade = ''  
 3         def __init__(self,n,a,w,g):  
 4             #調用父類的構函  
 5             people.__init__  
		

請關注公眾號獲取更多資料



首頁 上一頁 1 2 3 下一頁 尾頁 1/3/3
】【打印繁體】【】【】 【】【】【】 【關閉】 【返回頂部
上一篇django-request對象 下一篇Python 模塊