1. 程式人生 > >python筆記十五(面向對象及其特性)

python筆記十五(面向對象及其特性)

http 屬性和方法 接口 icm 圖片 post friend his 就是

一、面向對象:

class(類):一類擁有共同屬性對象的抽象;定義了這些對象的屬性和方法
object(對象):是一個類實例化後的實例,類必須經過實例化才可以在程序中調用;

由於之前學習過java,對類和對象已經有了一定的了解了,就不再詳細介紹。

技術分享圖片

二、特性

encapsulation(封裝):將內部的內容封裝起來了。例如數據的設置、訪問和處理結果我們都可以通過調用實例的方法直接獲取,而不需要知道內部的處理邏輯。
inheritance(繼承):一個類可以派生出子類,父類中定義的屬性和方法被子類自動繼承
polymorphism(多態):一個基類派生出了不同的子類,且每個子類都繼承了同樣的方法名的同時又對父類的方法做了不同的實現,這就是一種事物表現出的
多種形態。一個接口多種實現。

繼承

>>> class Animal(object):
...     def run(self):
...         print("animal is running")
...
>>> class Dog(Animal):
...     pass
...
>>> dog1 = Dog()
>>> dog1.run()
animal is running

多繼承

class People(object):

    def __init__(self,name,age):
        self.name 
= name self.age = age def say(self): print("%s say helllo"%self.name) class Relation: def make_friends(self,obj): print("%s is making friends with %s"%(self.name,obj.name)) class Man(People,Relation):#在多繼承的時候,如果兩個父類都有init,會先繼承左邊的,並且只繼承一個構造函數 #
python3廣度優先,python2經典類按深度優先繼承,新式類按廣度優先繼承 def __init__(self,name,age,money): #People.__init__(self,name,age) #這裏重寫的構造函數 super(Man,self).__init__(name,age)#這裏重寫的構造函數 self.money = money print("%s is born with %s money"%(self.name,self.money)) def say(self): People.say(self) #在重寫方法的時候調用父類的方法 print("hahahahahahahha ") m1 = Man("nadech",22,10000) m1.say() m2 = Man("lsw",22,1) m1.make_friends(m2)

輸出結果<<<<

nadech is born with 10000 money
nadech say helllo
hahahahahahahha
lsw is born with 1 money
nadech is making friends with lsw



多態

# Author:nadech
# 多態就是一個接口多個調用,在父類的方法中實現一個接口,每個子類的對象調用時有不同的輸出
class Animal(object):
    def __init__(self,name):
        self.name = name
    def talk(self):
        pass

    @staticmethod    #靜態方法,我們會在接下來一節中仔細介紹
    def animal_talk(obj):
        obj.talk()

class Dog(Animal):
    def talk(self):
        print("wow wow")

class Cat(Animal):
    def talk(self):
        print("meow")
d = Dog("狗狗")
c = Cat("貓貓")
Animal.animal_talk(c)
Animal.animal_talk(d)

python筆記十五(面向對象及其特性)