面向物件之封裝、繼承、重寫、過載、多型
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