python物件導向

來源:互聯網
上載者:User
類中成員

1.欄位

1.靜態欄位 通過類本身訪問 靜態欄位在類代碼載入時候就已經建立,無需等到new 類名()

2.普通欄位 通過對象訪問

2.方法

所有的方法屬於類

1.普通方法 只能先建立類的對象,然後通過對象來調用

def show(self): self是自動傳遞調用方法的類對象

print(self.name)

2.靜態方法 靜態方法的調用不依賴於任何對象,通過類名.方法名()調用,節省記憶體.

靜態方法就是python的函數,參數不需要加self.任意個參數

@staticmethod

def f1():

pass

3.類方法(靜態方法的特殊形式)

@classmethod

def f1(cls): cls是自動傳遞此方法所在的類名

pass

3.屬性

包含類中的欄位和方法兩種形式

@property //屬性聲明 //方法聲明

def all_page(self): def all_page(self):

return 100 return 100


@all_page.setter all_page必須是在裝飾器@property下面定義的函數

def all_page(self,value):

pass

obj.all_page = 100 //自動調用setter裝飾器下面的方法


@all_page.deleter

def all_page(self):

pass

del obj.all_page //自動調用deleter裝飾器下面的方法


obj.all_page 屬性調用 像欄位一樣去調用直接擷取函數的傳回值

obj.all_page() 方法調用 對象調用方法的時候後面必須加上()

foo = property(fget=func1,fset=func2,fdel=func3)

foo = property(func1,func2,func3)

func1,func2,fun3都是在類中定義的方法

類名.foo 程式執行func1方法並擷取func1的傳回值

類名.foo = "newvalue" 執行func2方法


成員修飾符

預設欄位和方法name為公有的如果在欄位和方法前面加上__那麼__name這個欄位就變成私人成員了

私人成員只有類本身可以訪問,子類都不可以訪問父類的私人成員


類的特殊成員

obj=Foo() 調用Foo類中的__init__內建方法,同時建立obj對象

obj() Foo()() 調用Foo類中的__call__內建方法 此種文法只在python中存在

__str__函數:

obj = Pager() print(obj) #<__main__.Pager object at 0x00000000006E3B00>

obj = Pager() print(obj.__dict__) #{'name':'333'} 輸出的值是dict類型資料

在Pager類中定義一個 def __str__(self): return "{name:obj.name}"

print(obj) #{name:333} 輸出的是對象的字串資訊而不是對象的記憶體位址

__dict__函數:

(obj是對象)obj.__dict__ 把任意對象封裝的所有資料轉成dict

(Pager是類)Pager.__dict__ 把任意類包含的成員資訊轉成dict

__getitem__(self,item) __setitem(self,key,value) __delitem__(self,key)函數:

obj = Foo()

obj['aa'] #自動調用Foo類中的__getitem__

obj['aa']=22 #自動調用Foo類中的__setitem__

del obj['aa'] #自動調用Foo類中的__delitem__

__iter__函數

一個對象預設是不可以被迭代的,如果對象所在的類定義了__iter__函數,那麼此對象便可迭代


isinstance ret=isinstance(obj,Foo) 查看對象obj是否是Foo類或者Foo的父類的對象

issubclass ret=issubclass(Foo,Bar)


super和裝飾器的功能區別(針對代碼擴充)

1.用裝飾器可以達到在別人原先寫的函數執行流程中加上自己的代碼,但是需要在原始碼檔案的函數

上添加一個裝飾器文法糖.

2.利用super和反射機制可以在完全不修改原來代碼的情況下,添加一個子類來繼承別人原來寫的類,在

子類自訂方法中添加super(cls).func來在現有的代碼添加原來的函數.實現代碼功能擴充.

model = __import__(Path,fromlist=True) Path是讀取的配置項字串

cls = getattr(model,ClassName) ClassName是讀取的配置項的字串

obj = cls()

obj.f1()

通過字串的方式動態調用python類中的具體函數.

  • 聯繫我們

    該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

    如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

    A Free Trial That Lets You Build Big!

    Start building with 50+ products and up to 12 months usage for Elastic Compute Service

    • Sales Support

      1 on 1 presale consultation

    • After-Sales Support

      24/7 Technical Support 6 Free Tickets per Quarter Faster Response

    • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.