主要内容:
- 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. 类中的特殊成员