day20_python_1124
01 昨日内容回顾
类的名称空间 对象的空间
class A:
def __init__():
pass
obj = A()
对象查询属性:对象本身 ----> 类 -----> 父类
类查询属性:类本身 -----> 父类
组合:一个类的属性是另一个类的对象。
class A:
def __init__(self,name):
self.name = name
def func(self,obj):
self.aaa = obj
class B:
pass
b = B()
o = A('barry')
o.func(666)
o.func(b)
python三大特性之一:继承,封装,多态。
继承:
单继承,多继承。
单继承:
class A:
def __init__(self,name):
self.name = name
def func(self,obj):
self.aaa = obj
class B(A):
def func(self,obj,obj2):
# A.func(self,obj)
#super(A,self).func(obj)
super().func(obj)
print(obj2)
b = B('wusir')
#b.func(111)
b.func()
# 既要执行子类func 又要执行父类的func
b.func(666,777)
02 作业讲解
03 类与类之间的关系
依赖关系
关联关系
聚合关系
组合关系
......
04 多继承
# 03 类与类的关系
# 依赖关系# 大象走进冰箱,并关闭# 基本类# class Elphant:# def __init__(self,name):# self.name = name# def open(self):# """# 开门# :return:# """# pass# def close(self):# """# 关门# :return:# """# pass## class Refrigerator:# def __init__(self,name):# self.name = name## def open_door(self):# print('冰箱门被打开啦')## def close_door(self):# print('冰箱门被关闭啦')
# 接下来# class Elphant:# def __init__(self, name):# self.name = name## def open(self,obj):# """# 开门# :return:# """# print('心里默念:1,2,3,开!')# obj.open_door()## def close(self):# """# 关门# :return:# """# print('心里默念:3,2,1关!')### class Refrigerator:# def __init__(self, name):# self.name = name## def open_door(self):# print('冰箱门被打开啦')## def close_door(self):# print('冰箱门被关闭啦')## e1 = Elphant('神奇的大象')# media = Refrigerator('美的')# e1.open(media)# 依赖关系:给一个类的方法传了一个参数此参数是另一个类的对象(类名)。# 这种依赖关系是所有关系中紧密型最低的,耦合性最低的。# 冰箱依赖大象,就好比企业与兼职工的关系,你中有我,我中没有你。
# 关联关系 聚合关系 组合关系
# class Boy:# def __init__(self, name, girlfriend=None):# self.name = name# self.girlfriend = girlfriend## def have_a_dinner(self):# if self.girlfriend:# print('%s 和 %s 一起共度晚餐'%(self.name,self.girlfriend.name))# else:# print('单身狗吃什么吃')## def append_girl(self,girl):# self.girlfriend = girl## def remove_girl(self):# self.girlfriend = None## class Girl:# def __init__(self, name):# self.name = name
# 起初创业没有女朋友# b = Boy('alex')# # b.have_a_dinner()## # 突然有一天 alex 家 拆迁,有女朋友了# g = Girl('如花')# # print(g.name)# b.append_girl(g)# b.have_a_dinner()
# wusir 娃娃亲# gg = Girl('金莲') ## wu = Boy('武大',gg)# wu.have_a_dinner()
# 西门太白出现。# gg = Girl('金莲') ## wu = Boy('武大',gg)# # 女朋友失去了# wu.remove_girl()# wu.have_a_dinner()
# 学校,老师# 老师一定要关联学校# class School:# def __init__(self,name,address):# self.name = name# self.address = address### class Teacher:# def __init__(self, name,comment,school):# self.name = name# self.comment = comment# self.school = school## def check_address(self):# print('%s 在%s 办公'%(self.name,self.school.address))### beijing = School('老男孩北京校区','美丽富饶的沙河')# shanghai = School('老男孩上海校区','上海漳江新区')# shenzhen = School('老男孩深圳校区','南山区平山村儿')## t1 = Teacher('太白','优秀',beijing)# t2 = Teacher('海峰','优秀',shanghai)# t3 = Teacher('日天','看吧',shenzhen)# t1.check_address()# 学校同时也要关乎多个老师# class School:# def __init__(self,name,address):# self.name = name# self.address = address# self.teacher_list = []
# def append_teacher(self,teacher): # self.teacher_list.append(teacher)
# class Teacher:# def __init__(self, name,comment,school):# self.name = name# self.comment = comment# self.school = school## def check_address(self):# print('%s 在%s 办公'%(self.name,self.school.address))
# beijing = School('老男孩北京校区','美丽富饶的沙河')# shanghai = School('老男孩上海校区','上海漳江新区')# shenzhen = School('老男孩深圳校区','南山区平山村儿')
# t1 = Teacher('太白','优秀',beijing)# t2 = Teacher('景女神','优秀',beijing)# t3 = Teacher('文周','优秀',beijing)# # t2 = Teacher('海峰','优秀',shanghai)# # t3 = Teacher('日天','看吧',shenzhen)# # t1.check_address()# beijing.append_teacher(t1)# beijing.append_teacher(t2)# beijing.append_teacher(t3)
# # print(beijing.teacher_list)# for i in beijing.teacher_list:# print(i.name)
# 04 面向对象三大特征:继承2
# 单继承的练习题:# 1# class Base:# def __init__(self, num):# self.num = num# def func1(self):# print(self)# print(self.num)## class Foo(Base):# pass## obj = Foo(123)# print(obj)# obj.func1()
# 2# class Base:## def __init__(self, num): # self = obj num = 123# self.num = num # 给对象空间封装属性 num = 123## def func1(self):# print(self.num)## class Foo(Base):## def func1(self):# print("Foo. func1", self.num)# obj = Foo(123) # 实例化对象,产生obj# obj.func1()
# 3
# class Base:## def __init__(self, num): # self= obj num = 123# self.num = num # obj.num = 123## def func1(self):# print(self.num)## class Foo(Base):## def func1(self):# print("Foo. func1", self.num)## obj = Foo(123) # obj 执行__init__# obj.func1()
# 4# class Base:## def __init__(self, num):# self.num = num # obj.num = 123## def func1(self):# print(self.num) # 123# self.func2() # "Foo.func2"## def func2(self):# print("Base.func2")## class Foo(Base):# def func2(self):# print("Foo.func2")## obj = Foo(123) # obj 执行__init__# obj.func1()
# 5
# 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# 第一次循环:Base(1) self.num = 1 Base(1).func2()# 第一次循环:Base(2) self.num = 2 Base(2).func2()# 第一次循环:Foo(3) self.num = 3 Foo(3).func2()
# class Base:## def __init__(self, num):# self.num = num## def func1(self):# print(self.num) # 3# 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()
# 第一次:obj = Base(1) obj.num = 1 1 111 1# 第二次:obj = Base(2) obj.num = 2 2 111 2# 第三次:obj = Foo(3) obj.num = 3 3 222 3
# class A:# def __init__(self):# self.func1()## def func1(self):# print('in A func1')## class B(A):# def func1(self):# print('in B func1')## obj = B()# obj.func1()
# 两个 in B func1
# 一个 in B func1
# 多继承'''python2x版本: python2.2版本之前,类都是经典类,不继承object python2.2之后,出现了新式类: class A(object) class A(object) 新式类 class B: 经典类
python3x :默认都继承object 都是新式类。
经典类: 多继承,深度优先。新式类: c3算法。'''# class A(object):# pass
# class Immortal:# """# 神仙类# """# def __init__(self):# self.age = '长生不老'## def fly(self):# print('神仙都会飞')## def eat(self):# print('神仙也需要进食')## class Monkey:## def climb(self):# print('猴子都会爬树')## def eat(self):# print('猴子需要进食')### class Monkey_sun(Immortal,Monkey):# pass## sun = Monkey_sun()# # sun.fly()# # sun.climb()# sun.eat()
# 经典类: 多继承,深度优先。
# class A:# pass# class B(A):# pass# class C(A):# pass# class D(B, C):# pass# class E:# pass# class F(D, E):# pass# class G(F, D):# pass# class H:# pass# class Foo(H, G):# pass
# 经典类遵循深度优先。从左至右依次寻找。
# 新式类:# class A:# pass## class B:# pass## class C(B,A):# pass# #mro(Child(Base1,Base2)) = [ Child ] + merge( mro(Base1), mro(Base2), [ Base1, Base2] )# # mro(C) = mro(C(B,A)) = [C] + merge(mro(B),mro(A),[B,A])## # [E,D]# class D:# pass## class E(D):# pass
# 表头 表尾# 表头 列表的第一个元素# 表尾 列表中表头以外的元素集合(可以为空)# [A,B,D,C] A表头 BDC 表尾
# merge( [E,O], [C,E,F,O], [C] )
# 取出第一个列表的表头 E 所有列表的表尾 O E F O ''# 如果E 在所有的表尾中,那么就跳过这个列表# merge( [E,O], [C,E,F,O], [C] )# 第二个列表表头: C O EFO '' 将C 单独提出# [c] + merge([E,O], [E,F,O])# mro(C) = mro(C(B,A)) = [C] + merge(mro(B),mro(A),[B,A])# mro(A) = mro(A(B,C))"""mro(A(B,C)) = [A] + merge(mro(B),mro(C),[B,C])mro(B) = mro(B(D,E))mro(B(D,E)) = [B] + merge(mro(D),mro(E),[D,E])mro(B(D,E)) = [B] + merge([D,O],[E,O],[D,E])mro(B(D,E)) = [B,D] + merge([O],[E,O],[E])mro(B(D,E)) = [B,D,E] + merge([O],[O])mro(B(D,E)) = [B,D,E,O]
mro(C) = mro(C(E,F))mro(C(E,F)) = [C] + merge([E,O],[F,O],[E,F])mro(C(E,F)) = [C,E] + merge([O],[F,O],[F])mro(C(E,F)) = [C,E,F] + merge([O],[O])mro(C(E,F)) = [C,E,F,O]
# 计算总的:mro(A(B,C)) = [A] + merge([B,D,E,O],[C,E,F,O],[B,C])mro(A(B,C)) = [A,B] + merge([D,E,O],[C,E,F,O],[C])mro(A(B,C)) = [A,B,D] + merge([E,O],[C,E,F,O],[C])mro(A(B,C)) = [A,B,D,C] + merge([E,O],[E,F,O])mro(A(B,C)) = [A,B,D,C,E] + merge([O],[F,O])mro(A(B,C)) = [A,B,D,C,E,F] + merge([O],[O])mro(A(B,C)) = [A,B,D,C,E,F,O] """
# class O:# def func(self):# print('in O')# class D(O):# pass# # def func(self):# # print('in D')## class E(O):# pass# # def func(self):# # print('in E')## class F(O):# def func(self):# print('in F')## class B(D,E):# pass# # def func(self):# # print('in B')## class C(E,F):# pass# # def func(self):# # print('in C')## class A(B,C):# def func(self):# super().func()# print('in A')# obj = A()# obj.func()# mro(A(B,C)) = [A,B,D,C,E,F,O]# print(A.__mro__)# super 遵循mro 顺序
# 依赖关系# 大象走进冰箱,并关闭# 基本类# class Elphant:# def __init__(self,name):# self.name = name# def open(self):# """# 开门# :return:# """# pass# def close(self):# """# 关门# :return:# """# pass# # class Refrigerator:# def __init__(self,name):# self.name = name# # def open_door(self):# print('冰箱门被打开啦')# # def close_door(self):# print('冰箱门被关闭啦')
# 接下来# class Elphant:# def __init__(self, name):# self.name = name## def open(self,obj):# """# 开门# :return:# """# print('心里默念:1,2,3,开!')# obj.open_door()## def close(self):# """# 关门# :return:# """# print('心里默念:3,2,1关!')### class Refrigerator:# def __init__(self, name):# self.name = name## def open_door(self):# print('冰箱门被打开啦')## def close_door(self):# print('冰箱门被关闭啦')## e1 = Elphant('神奇的大象')# media = Refrigerator('美的')# e1.open(media)# 依赖关系:给一个类的方法传了一个参数此参数是另一个类的对象(类名)。# 这种依赖关系是所有关系中紧密型最低的,耦合性最低的。# 冰箱依赖大象,就好比企业与兼职工的关系,你中有我,我中没有你。
# 关联关系 聚合关系 组合关系
# class Boy:# def __init__(self, name, girlfriend=None):# self.name = name# self.girlfriend = girlfriend## def have_a_dinner(self):# if self.girlfriend:# print('%s 和 %s 一起共度晚餐'%(self.name,self.girlfriend.name))# else:# print('单身狗吃什么吃')## def append_girl(self,girl):# self.girlfriend = girl## def remove_girl(self):# self.girlfriend = None## class Girl:# def __init__(self, name):# self.name = name
# 起初创业没有女朋友# b = Boy('alex')# # b.have_a_dinner()## # 突然有一天 alex 家 拆迁,有女朋友了# g = Girl('如花')# # print(g.name)# b.append_girl(g)# b.have_a_dinner()
# wusir 娃娃亲# gg = Girl('金莲') ## wu = Boy('武大',gg)# wu.have_a_dinner()
# 西门太白出现。# gg = Girl('金莲') ## wu = Boy('武大',gg)# # 女朋友失去了# wu.remove_girl()# wu.have_a_dinner()
# 学校,老师# 老师一定要关联学校# class School:# def __init__(self,name,address):# self.name = name# self.address = address### class Teacher:# def __init__(self, name,comment,school):# self.name = name# self.comment = comment# self.school = school## def check_address(self):# print('%s 在%s 办公'%(self.name,self.school.address))### beijing = School('老男孩北京校区','美丽富饶的沙河')# shanghai = School('老男孩上海校区','上海漳江新区')# shenzhen = School('老男孩深圳校区','南山区平山村儿')## t1 = Teacher('太白','优秀',beijing)# t2 = Teacher('海峰','优秀',shanghai)# t3 = Teacher('日天','看吧',shenzhen)# t1.check_address()# 学校同时也要关乎多个老师class School: def __init__(self,name,address): self.name = name self.address = address self.teacher_list = []
def append_teacher(self,teacher): self.teacher_list.append(teacher)
class Teacher: def __init__(self, name,comment,school): self.name = name self.comment = comment self.school = school
def check_address(self): print('%s 在%s 办公'%(self.name,self.school.address))
beijing = School('老男孩北京校区','美丽富饶的沙河')shanghai = School('老男孩上海校区','上海漳江新区')shenzhen = School('老男孩深圳校区','南山区平山村儿')
t1 = Teacher('太白','优秀',beijing)t2 = Teacher('景女神','优秀',beijing)t3 = Teacher('文周','优秀',beijing)# t2 = Teacher('海峰','优秀',shanghai)# t3 = Teacher('日天','看吧',shenzhen)# t1.check_address()beijing.append_teacher(t1)beijing.append_teacher(t2)beijing.append_teacher(t3)
# print(beijing.teacher_list)for i in beijing.teacher_list: print(i.name)
day20_python_1124的更多相关文章
随机推荐
- 我用MATLAB撸了一个2D LiDAR SLAM
0 引言 刚刚入门学了近一个月的SLAM,但对理论推导一知半解,因此在matlab上捣鼓了个简单的2D LiDAR SLAM的demo来体会体会SLAM的完整流程. (1)数据来源:德意志博物馆Deu ...
- JavaScript实现字符串逆置的几种方法
1. 一般来说js实现字符串逆置输出的一般思路是: 1.将字符串转为数组,一个字符为数组的一个元素: 2.将数组倒置: 3.再将数组元素拼接为字符串. 2. 一般用到的方法有: join():该方法用 ...
- Ajax 监听
$.ajaxSetup({ beforeSend: function (XMLHttpRequest) { alert("ajax请求之前"); } });
- 泛型-----键值对----映射 hashmap--entry中key value 链表
connection map 集合框架 * java.util.Collection *集合与数组相似,也是可以保存一组元素,并且提供了操作元素的相关方法. *collection是所有集合的顶级接口 ...
- HTML5中 audio标签的样式修改
由于html5的流行,现在移动端大多数的需求都可以使用audio来播放音频,但您可能只是需要很简单的播放/停止效果,但不同的浏览器上的audio样式却不尽人意,那么要怎么改变这个样式呢,其实它的原理比 ...
- web服务器集群(多台web服务器)后session如何同步和共享
在访问量上去以后,很多人会采用web集群的方式在满足逐渐增长的用户量.这时候就不得不面对一个问题,那就是在多个服务器下,每次请求都会因为负载均衡而分配到不同的服务器上.用户在登录服务器后,下一次请求被 ...
- 1、Kafka介绍
1.Kafka介绍 1)在流式计算中,Kafka一般用来缓存数据,Storm通过消费Kafka的数据进行计算. 2)Kafka是一个分布式消息队列. 3)Kafka对消息保存时根据Topic进行归类, ...
- Linux 默认线程栈大小 调优
Linux 线程栈介绍 栈,就是那些由编译器在需要的时候分配,在不需要的时候自动清除的变量的存储区.里面的变量通常是局部变量.函数参数等:和堆相比,栈通常很小. Linux 查询线程栈 1.查看默认的 ...
- DataFrame 行列数据的筛选
一.对DataFrame的认知 DataFrame的本质是行(index)列(column)索引+多列数据. DataFrame默认索引是序号(0,1,2…),可以理解成位置索引. 一般我们用id标识 ...
- inotify+rsync架构实现实时同步
前序 使用inotify+rsync架构实现(文件夹/文件)实时同步, 双机之间需要ssh免密码配置(两步完成ssh免密码登录) 环境 客户端:192.168.137.176 (rsync + ino ...