python學習總結(面向對象進階)
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 , __ 不要自己發明這樣的名字
5、xx__ :單後置下劃線,用於避免與Python關鍵詞的沖突
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學習總結(面向對象進階)