python學習---5

面向對象高級編程

1)給類或者實例綁定一個方法

from types import MethodType

給實例綁定:

s.set_age=MethodType(set_age,s,Student)
set_age:函數
s 實例
Student:類名

給類綁定

Student.set_age=MethodType(set_age,None,Student)

2)使用__slots__

限制class的屬性,規定哪幾個屬性可以在創建實例的時候添加屬性。

3)使用@property

裝飾器,既能檢查參數,又可以用類似屬性的方法來調用訪問類的變量

實現方式:

@property  把一個getter方法變成屬性

@xxx.setter 由@property創建出來的另外一個裝飾器。負責把setter變成屬性用來賦值

xxx就是函數名了。保持一致

eg:

class Student(object):

    @property
    def score(self):
        return self._score    @score.setter
    def score(self, value):
        if not isinstance(value, int):            
            raise ValueError('score must be an integer!')        
        if value < 0 or value > 100:            
            raise ValueError('score must between 0 ~ 100!')
        self._score = value

4)多重繼承

class bat(mammal,flyable)

Mixin 迷信 

多重繼承有幾個缺點。

結構複雜化,多個父類又有父類,就很複雜

順序模糊,先繼承誰,不清楚

功能衝突,相同方法名,該使用誰的方法


繼承用單一繼承

兩個以上的多重繼承必須用迷信繼承


Mix-in 類是具有以下特徵的抽象類:

    不能單獨生成實例;

    不能繼承普通類。

關於迷信繼承:

http://snoopyxdy.blog.163.com/blog/static/6011744020146311737593/

5)定製類

__slots__()

__len__()

__str__()

__iter__()

__getitem__()

__getattr__()

__call__()

6)type() and metaclass

type講解了由類到創建實例的過程

metaclass主要用於操作數據庫

ORM框架


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章