python學習總結 物件導向高階

2021-10-01 13:22:44 字數 4383 閱讀 2134

-------------------類屬性和例項屬性關係-------------------

1、類屬性和例項屬性關係

1、例項屬性

例項物件獨有的屬性

2、類屬性

類名訪問類屬性

3、例項中無同名屬性時,可訪問到類屬性,當定義同名例項屬性時,則無法訪問

4、常用的查詢指令

1、vars :檢視例項內屬性

2、dir :顯示類屬性和所有例項屬性

3、type :顯示型別

-------------------方法-------------------

1、例項方法

隱含的引數為類例項self

2、類方法

隱含的引數為類本身cls

3、靜態方法

為隱含引數,主要為了類例項也可以直接呼叫靜態方法

4、類名可以呼叫類方法和靜態方法,但不可以呼叫例項方法

5、例項:

class test(object):

def instancefun(self):

print("instancefun")

print(self)

@classmethod

def classfun(cls):

print("classfun")

print(cls)

@staticmethod

def staticfun():

print("staticfun")

-------------------私有化-------------------

1、xx :公有變數

2、_x :單前置下劃線,私有化屬性或方法,from somemodule import *禁止匯入,類物件和子類可以訪問

3、__xx :雙前置下劃線,避免與子類中的屬性命名衝突,無法在外部直接訪問(名字重整所以訪問不到)

4、__xx__ :雙前後下劃線,使用者名字空間的魔法物件或屬性。例如:init , __ 不要自己發明這樣的名字

6、示例:

#人類class person(object):

def __init__(self,name,age,state):

self.name = name

self._age = age

self.__state = state

def personshow(self):

print self.name

print self._age

print self.__state

def _work(self):

print('in work')

def __away(self):

print('in away')

#學生類繼承人

class student(person):

def setinfo(self,name,age,state):

self.name = name

self._age = age

self.__state = state

def studentshow(self):

print self.name

print self._age

print self.__state

#main入口

if __name__ == '__main__':

#建立乙個人類的物件

person = person('xiaohao', 18, 'football')

person.personshow()

#建立乙個學生物件

student = student('xiaohao', 18, 'football')

student.setinfo('xiaowang',25,'basketball')

student.studentshow()

student.personshow()

person._work()

person._person__away()

-------------------分析乙個類-------------------

1、__init__

1、說明 :構造初始化函式

2、觸發條件 :建立例項後,賦值時使用,在new後

2、__new__

1、說明 :生成例項所需屬性

2、觸發條件 :建立例項時

3、__class__

1、說明 :例項所在的類

2、觸發條件 :例項__class__

4、__str__

1、說明 :例項字串表示,可讀性

2、觸發條件 :print(類例項),如沒實現,使用repr結果

5、__repr__

1、說明 :例項字串表示,準確性

2、觸發條件 :類例項 回車 或者 print(repr(類例項))

6、__del__

1、說明 :析構

2、觸發條件 :del刪除例項

7、__dict__

1、說明 :例項自定義屬性

2、觸發條件 :vars(例項 dict)

8、__doc__

1、說明 :類文件,子類不繼承

2、觸發條件 :help(類或例項)

9、__getattribute__

1、說明 :屬性訪問***

2、觸發條件 :訪問例項屬性時,優先順序高於__dict__訪問

3、例項 :

#coding=utf-8

class itcast(object):

def __init__(self,subject1):

self.subject1 = subject1

self.subject2 = 'cpp'

#屬性訪問時***,打log

def __getattribute__(self,obj):

if obj == 'subject1':

print('log subject1')

return 'redirect python'

else:   #測試時注釋掉這2行,將找不到subject2

return object.__getattribute__(self,obj)

def show(self):

print 'this is itcast'

s = itcast('python')

print s.subject1

print s.subject2

10、__bases__

1、說明 :類的所有父類構成元素

2、觸發條件 :       

-------------------屬性保護-------------------

1、例項:

#coding=utf-8

class man(object):

def __init__(self, name, age):

self._name = name

self._age = age

@property

def name(self):

return self._name

@property

def age(self):

return self._age

@age.setter

def age(self, age):

if not isinstance(age, int):

raise valueerror('age should be int')

if age < 0 or age > 150:

raise valueerror('age should be 0-150')

self._age = age

m = man('jack', 32)

print(m.name)

print(m.age)

m.age = 40

print(m.age)

m.name = 'rose' #此處報錯

-------------------物件導向設計-------------------

1、封裝:

2、繼承:class cat(animle) class animle(object)

1、重寫

class cat(animle):

def chi(self):

重寫animal.chi(self)

3、多型:

1、虛方法

2、抽象方法

3、介面

4、示例:

class dog(animal):

def chi(self):

print 'chi'

def test(animal):

animal.chi()

dog = dog()

test(dog)

python 物件導向高階程式設計

python 裝飾器 property使用 classscreen property defwidth self returnself.width pass width.setter defwidth self,value self.width value property defheight se...

python 物件導向(高階篇)

文章摘自 類的成員可以分為三大類 字段 方法和屬性 方法 普通方法,靜態方法,類方法。屬性 普通屬性 字段包括 普通欄位和靜態字段,他們在定義和使用中有所區別,而最本質的區別是記憶體中儲存的位置不同,class student school python學院 def init self,name,a...

python物件導向高階程式設計

1.繫結方法 給所有例項都繫結方法,可以給class繫結方法 def set score self,score self.score score student.set score set score 給class繫結方法後,所有例項均可呼叫。但是,如果我們想要限制例項的屬性怎麼辦?比如,只允許對s...