1. 程式人生 > >python學習總結(面向對象進階)

python學習總結(面向對象進階)

__main__ ise tro -- Coding new assm tin 優先

-------------------類屬性和實例屬性關系-------------------
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學習總結(面向對象進階)