zoukankan      html  css  js  c++  java
  • 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
  • 相关阅读:
    无线安全课堂:手把手教会你搭建伪AP接入点
    转载——开阔自己的视野,勇敢的接触新知识
    关于系统架构的一些总结
    MessageBox.Show()如何换行
    不患寡而患不均
    由CHAR(2)引发的BUG
    DataRow.RowState 属性
    C# 使用TimeSpan计算两个时间差
    利用反射调出其他项目的界面
    DB2 中将date类型的转换成timestamp
  • 原文地址:https://www.cnblogs.com/vivi0403/p/9932187.html
Copyright © 2011-2022 走看看