一、字段python
包含靜態字段(每一個對象都有一份)和普通字段(每一個對象都不一樣的數據)ide
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)#普通字段由對象來調用
二、方法函數
包括靜態方法(@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 類方法不多用! 靜態方法:由類調用;無默認參數; 其實你在類中使用靜態方法:類+靜態方法其實就等於一個函數! 觸發者是類,經常使用於一個工具類,在調用的時候不須要實例化!舉例來講有個工具類,若是是普通方法每次調用的都須要實例化,若是有很是很是多的人來調用難道每次都須要實例化嗎?浪費內存空間,用靜態方法那麼你在調用的時候就不須要實例化他了!
三、特性spa
又稱屬性或普通特性(@property 即將方法僞形成字段)code
在python中屬性的使用時很是少的,可是在其餘語言中屬性用的很是多,由於在python中屬性是後來纔有的,他的功能目前還不是很強大!可是他要告訴人們我也是支持屬性的,因此纔有了這個屬性!對象
屬性是由方法變種而來,若是python中沒有屬性,方法徹底能夠代替其功能。blog
屬性存在的意義是:訪問屬性時能夠製造出和訪問字段徹底相同的假象。內存
屬性的基本使用:get
# ############### 定義 ############### 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,類調用
成員修飾符包括公有&私有
這裏主要強調一下