• python 面向对象类与类之间的关系


    主要内容:

    • 1. 依赖关系
    • 2. 关联关系, 组合关系, 聚合关系
    • 3. 继承关系
    • 4. 类中的特殊成员

    引子

    • 大千世界, 万物之间皆有规则和规律,我们的类和对象是对大千世界中的所有事物进行归类.
    • 那事物之间存在着相对应的关系. 类与类之间也同样如此.
    • 在面向对象的世界中. 类与类中存在以下关系:依赖关系 ,关联关系 ,组合关系 ,聚合关系 ,继承关系 ,实现关系   
    • 由于python是一门弱类型编程语言,并且所有的对象之间其实都是多态的关系.也就是说,所有的东西都可以当做对象来使用. 所以我们在写代码的时候很容易形成以上关系

    1. 依赖关系

    关于大象进冰箱的问题:

     
    class Elephant:
        def __init__(self,name):
            self.name = name
        def open(self,ref):
            print("冰箱,开门吧")
            ref.open_door()
        def close(self,ref):
            print("冰箱关门吧")
            ref.close_door()
        def enter(self):
            print("进冰箱装自己")
    
    class Fridge:
        def __init__(self):
            pass
        def open_door(self):
            print("冰箱打开了门")
        def close_door(self):
            print("冰箱关上了门")
    
    E=Elephant("tony")
    F1=Fridge()
    E.open(F1)
    E.enter()
    E.close(F1)
     

    就是大象和冰箱之间的关系是一种依赖关系,大象可以选择任何一个冰箱(我们可以通过类来创造出很多个 冰箱),甚至作为大象我可以选择冰箱甚至可以进高压锅,可以说此时的大象有选择的权利.

    2. 关联关系, 组合关系, 聚合关系

     
    class Boy:
        def __init__(self,name,character,girlfriend=None):
            self.name = name
            self.character = character
            self.girlfriend = girlfriend
        def xiangqin(self,girl):
            self.girlfriend = girl
        def eat(self):
            if self.girlfriend:
                print("吃东西好难,吃啥都不对")
            else:
                print("单身狗,狗粮够吗")
    class Girl:
        def __init__(self,name,boyfriend):
            self.name = name
            self.boyfriend =boyfriend
        def eat(self):
            print ("%s在吃饭" % self.name)
    
    g = Girl("排骨精","八戒")
    b = Boy("猪八戒","呵呵")
    b.xiangqin(g)
    b.eat()
     

    这是典型的一对一的关联关系,两个类的对象紧密练习着,关联关系, 其实就是我需要你,你也属于我这就是关联关系

     
    class School:
        def __init__(self,name,address,phone):
            self.name = name
            self.address = address
            self.phone = phone
            self.__teach_list = []
        def zhaopin(self,t):
            self.__teach_list.append(t)
        def display(self):
            for el in self.__teach_list:
                print(el.name,el.hobby)
    
    class Teacher:
        def __init__(self,name,gender,salary,hobby,school):
            self.name = name
            self.gender = gender
            self.salary = salary
            self.hobby = hobby
            self.school = school
    
    oldboy_bj = School("北京老男孩", "美丽富饶的沙河", "10086")
    oldboy_sh = School("北京老男孩, 上海分校", "上海浦东", "10010")
    oldboy_sz = School("北京老男孩, 深圳分校(骑士计划)", "南山区", "10000")
    
    t1 = Teacher("配齐", "男", 200000, "上课", oldboy_bj)
    t2 = Teacher("太白", "男", 150000, "开车", oldboy_bj)
    t3 = Teacher("Eggon", "男", 123456, "钻研技术", oldboy_sh)
    t4 = Teacher("高鑫", "女", 45678, "相夫教子", oldboy_sz)
    t5 = Teacher("日天", "男", 666, "看天", oldboy_sz)
    
    oldboy_bj.zhaopin(t1)
    oldboy_bj.zhaopin(t2)
    oldboy_bj.display()
    
    oldboy_sh.zhaopin(t3)
    oldboy_sz.zhaopin(t4)
    oldboy_sz.zhaopin(t5)
    oldboy_sz.display()
     

    老师必然属于⼀个学校. 换句话说,每个老师肯定有⼀个指定的工作机构. 就是学校,那老师的属性中必然关联着学校(一对多的情况)

    3. 继承关系

     
    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.func1()
     

    总结:

    • self在访问方法的顺序: 永远先找自己的,自己的找不到再找父类的. 
    • self就是你访问方法的那个对象,先找自己, 然后在找父类的. 

    4. 类中的特殊成员

  • 相关阅读:
    [学习笔记]康托展开
    [模板]平衡树
    [题解]涂色
    [学习笔记]Lucas定理
    欧拉定理及其证明
    一些杂题(排列组合
    swift 动画合集
    UIDynamicAnimator UIKit动力学
    swift 当协议遇见了泛型
    Swift 协议
  • 原文地址:https://www.cnblogs.com/avit/p/10209909.html
Copyright © 2020-2023  润新知