1. 程式人生 > >面向物件之封裝、繼承、重寫、過載、多型

面向物件之封裝、繼承、重寫、過載、多型

1,封裝定義:

    將物件的資料與操作資料的方法相結合,通過方法將物件的資料與實現細節保護起來,就稱之為封裝

    例如:  

class Person(object):
    __age=0
    def setter_age(self,age):
        if age>0 and age<150:
            self.__age=age
        else:
            print '輸入的數字沒有在0-150之間'
    def getter_age(self):
        return self.__age
p = Person()
p.setter_age(100)

print p.getter_age()

Person類中定義了私有屬性__age,類外設定和訪問這個屬性,只能通過呼叫setter_age和getter_age方法,而這兩個方法對__age屬性的做了一些處理,使得類外設定時只能設定在0-100之間,這就是實現了對__age屬性的封裝。

2,繼承

通過繼承子類可複用父類的方法和屬性,子類物件可直接呼叫父類的方法和屬性

例如:

class Animal():
    name='dongwu'
    def eat(self):
        print 'Animal eat'
class Cat(Animal):
    pass
cat=Cat()
cat.eat()

print cat.name

結果:
Animal eat

dongwu

3,方法的重寫

當子類的方法與父類方法名相同時,子類的子類的方法會隱藏父類的方法,子類的方法重寫了父類的方法。子類物件呼叫這個方法是呼叫的是子類的方法。

例如:

class Animal():
    name='dongwu'
    def eat(self):
        print 'Animal eat'
class Dog(Animal):
    name = 'gou'
    def eat(self):
        print 'Dog eat'
dog=Dog()
dog.eat()

print dog.name

4,方法的過載

在一個類中,定義了多個方法,方法名相同,引數型別或者個數不同,傳入不同的引數執行不同的方法

python由於存在可變形參和命名形參,在形式上方法的過載是不存在的

class Animal():
    name='dongwu'
    def eat(self,name='breakfast'):
        print 'Animal eat %s' %name
animal=Animal()
animal.eat()

animal.eat(name='')

結果:
Animal eat breakfast

Animal eat 

5,多型

多型就是同一個方法傳入不同的物件,有多種表現形態

方法的過載就面向物件多型的一種表現形式

例如:

class A(object):
    def show(self):
        print 'show A'
class B(object):
    def show(self):
        print 'show B'
a=A()
b=B()
def fuc(object):
    object.show()
fuc(a)

fuc(b)

結果:

show A
show B