1. 程式人生 > >python 依賴關係 與關聯關係

python 依賴關係 與關聯關係

#簡單版本(依賴關係)
# class Daxiang():
#     def open(self,door):
#         print('我是大象,我想開門')
#         door.open()
#         print('謝謝,你幫我開門!!!')
#
#     def zhuang(self):
#         print('門已經開了,那我就進去了')
#     def close(self,door):
#         print('我已經進去了,幫我關門')
#         door.close()
#         print('謝謝幫我關門,我呀死了')
# # class Door: # def open(self): # print('我是門,是叫我開門嗎?那我開了') # # def close(self): # print('我是門,你確定關門嗎?馬上就關') # # D = Door() # gg = Daxiang() # gg.open(D) # gg.zhuang() # gg.close(D) # # 以某個物件為主體,主體要使用副體的某個功能,任何的物件只要擁有這個功能的,都能成為這個副體 》》》 那麼主體與副體的關係就是 依賴關係

 

加強版(依賴關係)

class
Zombie: def __init__(self,name,attrack,hp): self.name = name self.attrack = attrack self.hp = hp def Attrack_To_Plant(self,P): P.hp -= self.attrack if P.hp <= 0: print('真慘,你一陣亡') else: print('注意,你還剩餘的血量是%s' % P.hp) zicai
= Plant('紫菜',10,100) #建立一個植物的物件 zombie1 = Zombie('殭屍1',5,100)#建立一個殭屍的物件 zicai.Attrack(zombie1) #紫菜攻擊殭屍1 一次 zicai.Attrack(zombie1) #紫菜攻擊殭屍1 一次 zicai.Attrack(zombie1) #紫菜攻擊殭屍1 一次 zicai.Attrack(zombie1) #紫菜攻擊殭屍1 一次 zombie1.Attrack_To_Plant(zicai)#殭屍攻擊紫菜

 

關聯關係

class Person:
    def __init__(self,name,Bag=None):
        self.name = name
        self.bag = Bag

    def GTA(self):
        if self.bag:
            print('%s 你在幹啥,還不帶上你的%s去幹啥'%(self.name,self.bag.name))
        else:
            print('連個包都沒有,還能去哪')

class BB:
    def __init__(self,name):
        self.name = name

gg = Person('小明')
New_bag = BB('書包')
gg.bag = New_bag
gg.bag = 0
gg.GTA()

# 關聯關係:主體的某個屬性 是一個物件(副體) ,這個物件在賦值給主體的屬性之後,相當屬於主體的一部分,如果主體要使用副體的功能
可以直接通過屬性找到該物件之後,進行功能的呼叫就可以了

加強版(關聯關係)

class Teacher:
    def __init__(self,name,lst=None):
        self.name = name
        if lst == None:
            self.lst = []
        else:
            self.lst = lst
    def Append(self,s):
        self.lst.append(s)

class Student:
    def __init__(self,No,name,age):
        self.name = name
        self.No = No
        self.age = age

T1 = Teacher('小瀋陽')
print(T1.name)
print(T1.lst)
S1 = Student(1,'Luffy',18)
S2 = Student(2,'Luffy2',18)
S3 = Student(3,'Luffy3',18)
S4 = Student(4,'Luffy4',18)
T1.Append(S1)
T1.Append(S2)
for i in T1.lst:
    print(i.name)
View Code

 

繼承關係:self在訪問方法時候,現在自己的名稱空間查詢,如果在自己的名稱空間找不到的話,再到父類的名稱空間

去查詢,如果在父類都還找不到的話,就出相應的報錯。

同時注意的是哪個物件一開始進行呼叫方法的,self就是那個物件,即使物件本身沒有該方法,通過繼承關係到父類查詢

名稱相同的方法進行呼叫的時候,self也沒有沒有變的

class Base:
    def __init__(self, num):
        self.num = num

    def func1(self):
        print(self.num)
        self.func2()

    def func2(self):
        print(111, self.num)

class Foo(Base):
    def func2(self):
        print(222, self.num)

lst = [Base(1), Base(2), Foo(3)]
for obj in lst:
    obj.func2()

結果:
111 1
111 2
222 3
View Code