1. 程式人生 > >python中的面向物件學習以及類的繼承和繼承順序

python中的面向物件學習以及類的繼承和繼承順序

繼承

首先編寫一串關於類的程式碼行:

__author__ = "Yanfeixu"


# class People: 經典類不用加(object)
class People(object): #新式類
    def __init__(self,name,age):
        self.name = name
        self.age = age
        self.friends = []
        print("--doens't run ")
    def eat(self):
        print("%s is eating..." % self.name)
    def talk(self):
        print("%s is talking..." % self.name)
    def sleep(self):
        print("%s is sleeping..." % self.name)

class Relation(object): # 子類的建立,也要定義建構函式
    def __init__(self,n1,n2):
        print("init in relation")
    def make_friends(self,obj): #w1
        print("%s is making friends with %s" % (self.name,obj.name))
        self.friends.append(obj.name)
class Man(Relation,People):  # 該子類繼承多個父類,並且重構了自己的建構函式
    # def __init__(self,name,age,money):   #---》先覆蓋父類
    #     #People.__init__(self,name,age)  # 如果有很多的父類情況下,這種父類的呼叫就很麻煩
    #     super(Man,self).__init__(name,age) #新式類寫法,相比於上面寫法比較簡潔點----》再繼承父類
    #     self.money  = money #---》再新增自己特有的功能
    #     print("%s 一出生就有%s money" %(self.name,self.money))
    def piao(self):
        print("%s is piaoing ..... 20s....done." % self.name)
    def sleep(self):
        People.sleep(self)
        print("man is sleeping ")
class Woman(People,Relation):  #每個子類之間是互不干擾的
    def get_birth(self):
        print("%s is born a baby...." % self.name)

m1 = Man("NiuHanYang",22)
# w1 = Woman("ChenRonghua",26)
#
# m1.make_friends(w1)
# w1.name = "陳三炮"
# print(m1.friends[0])

該部分的學習主要注意程式碼行中註釋的部分,因為在繼承部分小知識點非常多,所以注意點基本都是寫在註釋之中。
還有就是從本人學習類這部分來看,個人的心裡感受就是,在類的封裝部分的例項與類的繼承部分的父類和子類關係基本上原理上是一樣的,類的例項化只能從類中得到類的屬性,但是想要新的屬性的時候就要重新定義性的函式方法,這種原理其實和子類中的重構函式是一樣的道理。

類的繼承順序

在這裡插入圖片描述

python2:經典類是按深度優先來繼承,新式類是按廣度優先來繼承。
python3:經典類和新式類都是按廣度優先來繼承,因為效率會比較高。
注意區分經典類和新式類的區別和聯絡!在上面的程式碼行中有提到。

小福利:


在這裡插入圖片描述