面向對象之成員

1、總概

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

一、字段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

 

2、如何快速判斷何時用類執行,何時用對象執行

我的總結:

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

老師總結:

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

3、成員修飾符

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

這裏主要強調一下

 4、類的特殊成員

相關文章
相關標籤/搜索