python物件導向

2022-03-14 05:07:32 字數 4686 閱讀 7312

1.封裝

使用構造方法將內容封裝到內容中,然後通過物件直接或通過self間接獲取被封裝的內容

2.繼承

將多個類共有的方法提取到父類(基類)中,子類(派生類)僅需繼承而不需要一一實現.

支援多繼承.python3中定義的都是新式類,python2中是經典類

python繼承順序遵循3c演算法

class

d(object):

defbar(self):

print

'd.bar

'class

c(d):

defbar(self):

print

'c.bar

'class

b(d):

defbar(self):

print

'b.bar

'class

a(b, c):

defbar(self):

print

'a.bar

'a =a()

#執行bar方法時

#首先去a類中查詢,如果a類中沒有,則繼續去b類中找,如果b類中麼有,則繼續去c類中找,如果c類中麼有,則繼續去d類中找,如果還是未找到,則報錯

#所以,查詢順序:a --> b --> c --> d

#在上述查詢bar方法的過程中,一旦找到,則尋找過程立即中斷,便不會再繼續找了

a.bar()

新式類多繼承

3.多型

多種狀態,多種形態.

方法包括:普通方法,靜態方法和類方法.三種方法在記憶體中都歸屬於類,區別在於呼叫方式的不同.

普通方法:由物件呼叫;至少乙個self引數,執行普通方法時,自動將呼叫方法的物件賦值給self.

類方法:由類呼叫,至少乙個cls引數,執行方法時,自動將呼叫該方法的類賦值給cls.

靜態方法:由類呼叫.無缺省引數.

相同點:對於所有的方法而言,均屬於類(非物件)中,所以,在記憶體中也只儲存乙份.

不同點:方法呼叫者不同,呼叫方法時自動傳入的引數不同.

在定義時候,在普通方法的基礎上新增@property;屬性僅有乙個self引數

class

foo:

deffunc(self):

print(123)

@property

def prop(self): #

定義屬性

print(666)

obj =foo()

obj.func()

obj.prop

在呼叫時,無需括號 .方法:foo_obj.func()

屬性:foo_obj.prop

屬性存在的意義是:訪問屬性時可以製造和訪問字段完全相同的假象.,屬性由方法變種而來,如果python中沒有屬性,方法完全可以代替其功能.

公有成員:在任何地方都可以訪問

私有成員:只能在類的內部才可以訪問

方式一:

class

base(object):

deff1(self):

print('酸甜'

)class

foo(object):

deff1(self):

print('麻辣'

) base.f1(self)

obj =foo()

obj.f1() #列印 麻辣,酸甜

方式二:

class

foo(object):

deff1(self):

super().f1()

print('

suantian')

class

bar(object):

deff1(self):

print('

mala')

class

info(foo,bar):

pass

obj =info()

obj.f1() #列印 mala ,suantian

1.類名() 自動執行  __init__

2.物件() 自動執行 __call__

3.物件['xx']      自動執行__getitem__

4.物件['xx'] = 11 自動執行__setitem__

5.del 物件[xx]  自動執行__delitem__

6.物件+物件 自動執行 __add__

7.with 物件  自動執行__enter__ (開始) /     __exit__(結束)

8.真正 的構造方法

class

foo(object):

def__init__(self, a1, a2): #

初始化方法

"""為空物件進行資料初始化

:param a1:

:param a2:

"""self.a1 =a1

self.a2 =a2

def__new__(cls, *args, **kwargs): #

構造方法

"""建立乙個空物件

:param args:

:param kwargs:

:return:

"""return object.__new__(cls) #

python內部建立乙個當前類的物件(初創時內部是空的.).

obj1 = foo(1,2)

print

(obj1)

obj2 = foo(11,12)

print(obj2)

9.__dict__

class

foo:

def__init__

(self,name,age):

self.name =name

self.age =age

deffunc(self):

pass

obj1 = foo('

liu','18'

)obj2 = foo('

wu','

17') #

列印 #列印

print(obj1.__dict__

)

print(obj2.__dict__)

10.__iter__

如果想要把不可迭代物件轉化為可迭代物件:1,在類中定義__iter__方法,2.iter內部返回乙個迭代器

11.issubclass()

class

foo:

pass

class

base(foo):

pass

class

bar(base):

pass

print(issubclass(bar,foo)) #

列印true 判斷第乙個元素是否是第二個元素的子子孫孫類

12.type()   獲取當前元素由哪個類建立

class

foo:

pass

obj =foo()

print(type(obj)) #

列印

13.isinstance()   檢查第乙個引數(物件)是否是第二個引數(類及父類)的例項

class

base():

pass

class

foo(base):

pass

obj1 =foo()

print(isinstance(obj1,foo)) #

列印true

print(isinstance(obj1,base)) #

列印true

obj2 =base():

print(isinstance(obj2,foo)) #

列印false

print(isinstance(obj1,base)) #

列印true

*區分:給乙個引數,判斷物件是不是由某乙個指定類? type   --->type(obj) == foo

給乙個引數,判斷物件是不是由某乙個指定類或其父類?isinstanace---->isinstance(obj,foo)

判斷乙個元素是函式還是方法:

from types import

methodtype,functiontype

defcheck(arg):

ifisinstance(arg,methodtype):

print('方法'

)

ifisinstance(arg,functiontype)

print('

函式')

python物件導向中的反射,通過字串的形式操作物件相關的屬性.python中的一切事物皆是物件(都可以使用反射)

四個可以實現自省的函式

hasattr     

getattr

setattr

delattr

python物件導向學習 python物件導向學習

物件導向最重要的概念就是類 class 和例項 instance 必須牢記類是抽象的模板,比如student類,而例項是根據類建立出來的乙個個具體的 物件 每個物件都擁有相同的方法,但各自的資料可能不同。物件導向三個概念 1.封裝 即把客觀事物封裝成抽象的類,並且類可以把自己的資料和方法讓可信的類進...

python物件導向總結 Python物件導向總結

python 物件導向 oop 1 物件導向 是乙個更大封裝,把乙個物件封裝多個方法 2 類 是對一些具有相同特徵或行為的事物的乙個統稱,是抽象的,不能直接使用 特徵被稱為屬性 行為被稱為方法 3 物件 是由類建立出來的乙個具體的存在,可以直接使用 先有類再有物件,類只有乙個,而物件可以有多個 類中...

python登入物件導向 python 物件導向

一 屬性和方法 1.a a 例項屬性 通過例項物件來新增的屬性就是例項屬性 a.count 10 例項方法都是在類中直接定義的 以self為第乙個引數的方法都是例項方法 當通過例項物件呼叫時,會自動傳遞當前物件作為self傳入 當通過類物件呼叫時,不會自動傳遞self a.test 等價於 a.te...