1.封裝
使用構造方法將內容封裝到內容中,然後通過物件直接或通過self間接獲取被封裝的內容
2.繼承
將多個類共有的方法提取到父類(基類)中,子類(派生類)僅需繼承而不需要一一實現.
支援多繼承.python3中定義的都是新式類,python2中是經典類
python繼承順序遵循3c演算法
classd(object):
defbar(self):
'd.bar
'class
c(d):
defbar(self):
'c.bar
'class
b(d):
defbar(self):
'b.bar
'class
a(b, c):
defbar(self):
'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引數
classfoo:
deffunc(self):
print(123)
@property
def prop(self): #
定義屬性
print(666)
obj =foo()
obj.func()
obj.prop
在呼叫時,無需括號 .方法:foo_obj.func()
屬性:foo_obj.prop
屬性存在的意義是:訪問屬性時可以製造和訪問字段完全相同的假象.,屬性由方法變種而來,如果python中沒有屬性,方法完全可以代替其功能.
公有成員:在任何地方都可以訪問
私有成員:只能在類的內部才可以訪問
方式一:
classbase(object):
deff1(self):
print('酸甜'
)class
foo(object):
deff1(self):
print('麻辣'
) base.f1(self)
obj =foo()
obj.f1() #列印 麻辣,酸甜
方式二:
classfoo(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.真正 的構造方法
classfoo(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)
(obj1)
obj2 = foo(11,12)
print(obj2)
9.__dict__
classfoo:
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()
classfoo:
pass
class
base(foo):
pass
class
bar(base):
pass
print(issubclass(bar,foo)) #
列印true 判斷第乙個元素是否是第二個元素的子子孫孫類
12.type() 獲取當前元素由哪個類建立
classfoo:
pass
obj =foo()
print(type(obj)) #
列印
13.isinstance() 檢查第乙個引數(物件)是否是第二個引數(類及父類)的例項
classbase():
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 importmethodtype,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...