面向對象之成員

  • 2019 年 10 月 20 日
  • 筆記

一、總概

二、面向對象中類的成員組成

1、欄位

包含靜態欄位(每個對象都有一份)和普通欄位(每個對象都不同的數據)

class Person():      company='neusoft'#靜態欄位      def __init__(self,name,age,gender):          self.N=name #普通欄位          self.A=age          self.G=gender  #執行靜態欄位  print(Person.company)#靜態欄位由類調用  #訪問普通欄位  r=Person('tina',18,'female')  print(r.A)#普通欄位由對象來調用

 

2、方法

包括靜態方法(@staticmethod,無需使用對象封裝的內容)、類方法(classmethod)、普通方法(使用對象中的數據)

class Person():      def __init__(self,name,age):          self.name=name          self.age=age      def f1(self):#普通方法          print(1111)      @classmethod#類方法      def f2(cls):          print(2222)      @staticmethod#靜態方法      def f3():#靜態方法沒有默認參數(可以加任何參數)          print(2222)  #執行普通方法:  ret=Person('tina',18)  ret.f1()  #調用類方法:  Person.f2()  #調用靜態方法:  Person.f3()

 

普通方法:由對象調用;至少一個self參數;執行普通方法時,自動將調用該方法的對象賦值給self;    比如:調用obj1.modify()  在調用的時候就相當於把對象賦值給方法:Dbcontrl.modify(obj1)  他的觸發者是對象!        類方法:由類調用; 至少一個cls參數;執行類方法時,自動將調用該方法的類複製給cls;    類方法的觸發者是類,當類在觸發的時候,把自己當作參數傳給cls = class    類方法很少用!        靜態方法:由類調用;無默認參數;    其實你在類中使用靜態方法:類+靜態方法其實就等於一個函數!    觸發者是類,常用於一個工具類,在調用的時候不需要實例化!舉例來說有個工具類,如果是普通方法每次調用的都需要實例化,如果有非常非常多的人來調用難道每次都需要實例化嗎?浪費記憶體空間,用靜態方法那麼你在調用的時候就不需要實例化他了!

針對三種方法的總結概括

 

3、特性

又稱屬性或普通特性(@property 即將方法偽造成欄位)

 在python中屬性的使用時非常少的,但是在其他語言中屬性用的非常多,因為在python中屬性是後來才有的,他的功能目前還不是很強大!但是他要告訴人們我也是支援屬性的,所以才有了這個屬性!

屬性是由方法變種而來,如果python中沒有屬性,方法完全可以代替其功能。

屬性存在的意義是:訪問屬性時可以製造出和訪問欄位完全相同的假象。

屬性的基本使用:

# ############### 定義 ###############  class Pager:        def __init__(self, current_page):          # 用戶當前請求的頁碼(第一頁、第二頁...)          self.current_page = current_page          # 每頁默認顯示10條數據          self.per_items = 10          @property      def start(self):          val = (self.current_page - 1) * self.per_items          return val        @property      def end(self):          val = self.current_page * self.per_items          return val    # ############### 調用 ###############    p = Pager(1)  p.start 就是起始值,即:m  p.end   就是結束值,即:n

 

#特性的補充內容:  class Foo:      def func(self):          print('func')      @property      def pp(self):          return 123      @pp.setter      def pp(self,value):          print(value)      @pp.deleter      def pp(self):          print('del')  obj=Foo()  print(obj.pp)  obj.pp=9999  del obj.pp    #特性的另一種使用方式:  class Foo():      def f1(self):          return 'sdkdlalg'      def f2(self,value):          print(value)      def f3(self):          print('lsfjsljsl')      ZO=property(fget=f1,fset=f2,fdel=f3,doc='此處是說明')  obj=Foo()  ret=obj.ZO  obj.ZO=122324  del obj.ZO

 

二、如何快速判斷什麼時候用類執行,什麼時候用對象執行

個人總結:

遇到普通即用對象,其他就用類。(即普通方法、普通欄位、普通特性用對象來調用;類方法,靜態欄位、靜態方法則用類來調用執行)

老師總結:

有self的,對象調用;無self,類調用

三、成員修飾符

成員修飾符包括公有&私有

這裡主要強調一下

 四、類的特殊成員