面向对象 - 继承/组合 - 总结

面向对象 - 继承:
1.继承: 类与类之间的关系 什么是什么的关系 eg:人是动物 狗是动物
功能: 解决代码重用问题, 创建新类的方式,
类: 可继承一个或多个父类:
父类 == 基类/超类
类 == 派生类/子类

类: 对象之间相似的特征
父类: 类与类之间相似的特征

继承:是基于抽象的结果,通过编程语言去实现它,肯定是先经历抽象这个过程,才能通过继承的方式去表达出抽象的结构。



继承相关知识:
1.查看继承哪些类?
SubClass1.__bases__
2.父类的属性 都是子类的, 数据属性和函数属性都是公用的 Garen.x is Riven.x == True Riven.attack is Riven.attack == True
3.属性查找的顺序:1.对象自己内部找-->2.对象所在的类里面找-->3.父类里面找
2.派生:
2.1.子类可以添加自己的新属性 数据属性和函数属性
2.2.子类的属性名和父类的属性名 若相同 子类覆盖父类的属性
3.继承的实现原理:
3.1.python会计算出一个方法解析顺序列表(MR0),所有基类的线性顺序列表
F.mro() == F.__mro__
[<class '__main__.F'>, <class '__main__.D'>, <class '__main__.B'>, <class '__main__.X'>,
<class '__main__.E'>, <class '__main__.C'>, <class '__main__.A'>, <class 'object'>]
3.2.属性查找:
0.对象本身优先于子类
1.子类优先于父类
2.多个父类会根据(MRO)列表 依次查找
3.如果对下一个类存在两个合法的选择,选择第一个父类
3.3.python的类
py2:
经典类:没有继承object的类,以及它的子类都称之为经典类 --》深度优先
新式类:继承object的类,以及它的子类都称之为新式类 --》广度优先
py3:
新式类:一个类如果没有继承object的类,就默认继承object --》广度优先
3.4.属性查找方式:(本质都是按列表mro顺序来的)
1.深度优先
2.广度优先

 

    
4.派生出的方法 重用 父类的属性:

4.1.指名道姓 不依赖继承
Hero.attack(self, enemy)
Hero.__init__(self,nickname,life_value,aggressivity)
4.2.super() 依赖继承 super() 找的是子类的(MRO)列表中的下一个 C.mro()
super(Garen, self).attack(enemy) py2 写法
super().attack(enemy) py3 写法
super().__init__(nickname,life_value,aggressivity)

  1 class ParentClass1:
  2     pass
  3 
  4 class ParentClass2:
  5     pass
  6 
  7 class SubClass1(ParentClass1):
  8     pass
  9 
 10 class SubClass2(ParentClass1,ParentClass2):
 11     pass
 12 
 13 # print(SubClass1.__bases__)
 14 # print(SubClass2.__bases__)
 15 
 16 class Hero:
 17     x=3
 18     def __init__(self,nickname,life_value,aggressivity):
 19         self.nickname=nickname
 20         self.life_value=life_value
 21         self.aggressivity=aggressivity
 22 
 23     def attack(self,enemy):
 24         enemy.life_value-=self.aggressivity
 25         print('父类 里的 attack')
 26 
 27 class Garen(Hero):
 28     # x=2
 29     camp='Demacia'
 30 
 31     def __init__(self,nickname,life_value,aggressivity):
 32         # Hero.__init__(self,nickname,life_value,aggressivity)
 33         # super(Garen, self).__init__(nickname,life_value,aggressivity)
 34         super().__init__(nickname,life_value,aggressivity)
 35         print('garen __init__')
 36 
 37     def attack(self,enemy):
 38         # Hero.attack(self, enemy)
 39         # super(Garen, self).attack(enemy)
 40         super().attack(enemy)
 41         print('子类 里的 attack')
 42 
 43 
 44     def func(self):
 45         print('func')
 46 
 47     def func2(self):
 48         pass
 49 
 50 class Riven(Hero):
 51     camp='Noxus'
 52     pass
 53 
 54 # g=Garen('alice1',50,30)
 55 # g2=Garen('alice2',50,30)
 56 # r=Riven('alex',80,60)
 57 # print(g.__dict__)
 58 # g.attack(r)
 59 
 60 # print(g.camp)
 61 # print(r.camp)
 62 # g.attack(r)
 63 # g.func()
 64 # r.func()
 65 # print(g.x)
 66 
 67 # print(g.__dict__)
 68 # g.x=2
 69 # print(g.x)
 70 # print(r.life_value)
 71 # g.attack(r)
 72 # print(r.life_value)
 73 # print(Garen.x is Riven.x )
 74 # print(Garen.attack)
 75 # print(Riven.attack)
 76 # print(Riven.attack is Riven.attack)
 77 # print(g.attack,id(g.attack))
 78 # print(r.attack,id(r.attack))
 79 # print(id(g))
 80 # print(g.func,id(g.func))
 81 # print(g.func2,id(g.func2))
 82 # print(g2.func,id(g2.func))
 83 # print(g2.func2,id(g2.func2))
 84 # print(g.func is g.attack)
 85 # print(g.func is g.func2)
 86 # print(id(Garen.func),id(Garen.func2))
 87 
 88 class Foo:
 89     def f1(self):
 90         print('from Foo.f1')
 91 
 92     def f2(self):
 93         print('from Foo.f2')
 94         self.f1()
 95 
 96 class Bar(Foo):
 97     d=1
 98     def f1(self):
 99         print('from Bar.f1')
100 
101 # b=Bar()
102 # b.f2()
103 
104 class A:
105     pass
106 
107 class X(A):
108     pass
109 
110 class B(X):
111     pass
112 
113 class C(A):
114     pass
115 
116 class D(B):
117     pass
118 
119 class E(C):
120     pass
121 
122 class F(D,E):
123     pass
124 
125 f=F()
126 # print(f.__dict__)
127 # print(F.mro())
128 # print(F.__mro__)
129 
130 class Foo:
131     pass
132 # class Bar(Foo):
133 #     pass
134 # print(Foo.__bases__)
135 
136 class A:
137     def f1(self):
138         print('from A')
139         super().f1()
140 
141 class B:
142     def f1(self):
143         print('from B')
144 
145 class C(A,B):
146     pass
147 
148 c=C()
149 c.f1()
150 print(C.mro())
151 print(C.__mro__)
152 # [<class '__main__.C'>, <class '__main__.A'>, <class '__main__.B'>, <class 'object'>]
继承

面向对象 - 组合:
组合:什么有什么的关系 继承是:什么是什么的关系 都实现了代码重用
对象的属性 被赋值 一个对象/一个列表,列表有多个对象 等

 1 class People:
 2     def __init__(self,name,age,sex):
 3         self.name=name
 4         self.age=age
 5         self.sex=sex
 6 
 7 class Teather(People):
 8     def __init__(self,name,age,sex,level,salary):
 9         super().__init__(name,age,sex)
10         self.level=level
11         self.salary=salary
12 
13     def teach(self):
14         print('%s is teaching'%self.name)
15 
16 class Student(People):
17     def __init__(self,name,age,sex,class_time):
18         super().__init__(name,age,sex)
19         self.class_time=class_time
20 
21     def learn(self):
22         print('%s is learning'%self.name)
23 
24 class Course:
25     def __init__(self,course_name,course_price,course_period):
26         self.course_name=course_name
27         self.course_price=course_price
28         self.course_period=course_period
29 
30     def tell_info(self):
31         print('课程名<%s> 课程价钱<%s> 课程周期<%s>'%(self.course_name,self.course_price,self.course_period))
32 
33 class Date:
34     def __init__(self,year,month,day):
35         self.year=year
36         self.month=month
37         self.day=day
38 
39     def tell_info(self):
40         print('%s-%s-%s'%(self.year,self.month,self.day))
41 
42 tea1=Teather('alex',18,'male',10,3000)
43 tea2=Teather('egon',28,'female',8,2000)
44 
45 stu1=Student('alice',12,'female','08:30:00')
46 stu2=Student('lily',16,'male','09:00:00')
47 
48 python=Course('python',2000,'3mons')
49 linux=Course('linux',3000,'4mons')
50 
51 # date=Date(1990,10,11)
52 
53 # tea1.teach()
54 # stu1.learn()
55 # python.tell_info()
56 # date.tell_info()
57 
58 # tea1.course=[python,linux]
59 # tea1.course[0].tell_info()
60 # tea1.course[1].tell_info()
61 #
62 # stu1.course=python
63 # print(stu1.course.course_name)
64 
65 # stu1.course1=python
66 # stu2.course2=linux
67 # print(stu1.course1.course_name)
68 # print(stu2.course2.course_period)
69 
70 # stu1.course=[]
71 # stu1.course.append(python)
72 # stu1.course.append(linux)
73 # stu1.course[0].tell_info()
74 # stu1.course[1].tell_info()
75 
76 # stu1.birth=Date(2000,10,11)
77 # stu1.birth.tell_info()
组合


转载于:https://www.cnblogs.com/alice-bj/p/8544512.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/267466.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

巧妙的有css合并图片解决tab切换的背景图片

巧妙的有css合并图片解决tab切换的背景图片 有时候做tab切换的时候 会碰到下面的这种情况 我截个图过来看看 tab切换 打开页面时候 茶庄介绍 及鼠标移上去时候 是上面这样的效果 当鼠标移下来的时候 是下面这样的 茶庄介绍 就变成这样的背景 一刚开始做这样的 我就想到用j…

XUPT_STA2018(部分题解)

A - 一方通行和最大公约数I CodeForces - 664A 作为学园都市最强的lv5&#xff0c;一方通行必须解决一道数学题才能接触last order身上植入的病毒&#xff0c;请你帮他解决这个问题。给出两个整数a,b 求出[a,b]区间中所有整数的最大公约数。输入输入包括一行&#xff0c;一…

java mongodb drivers 2升级到3_JAVA从头开始一基础梳理(3-2)

本章为大家介绍类的特性。首先&#xff0c;第一个特性----封装。在这个类别中&#xff0c;属性id 与属性 color 是可以被外部直接访问和修改的&#xff0c;比如可以看到&#xff0c;事实上这样的内容是错误的&#xff0c;我们需要在定义属性值时需要加入验证等等操作&#xff0…

C 语言第6节课

我上课C语言的第6节的笔记 &#xff1a;C语言真的需要多做多练多理解&#xff0c;不然真的学不懂.记不住呀。第一题&#xff1a;睇图片解题。main(){int x,y;scanf("%d",&x);if(x<0)printf("y%d",0);if(x>0&&x<5)printf("y%d&qu…

activiti idea 请假流程_IDEA开发流程Activiti需要注意的一些坑

1、慎用IDEA2020最新版本IDEA2020最新版本迎来了重大升级&#xff0c;对java和spring有了更好更强大的开发支持&#xff0c;但是对于Activiti流程开发却不再支持&#xff0c;可能是因为actiBPM插件太老&#xff0c;或者IDEA2020对插件支持做了规范要求等等&#xff0c;请各位喜…

VIPCA无法运行

本文转自ITPUB上一兄弟总结&#xff0c;以备查询。 今天一早来&#xff0c;同事说他周末在安装 rac 出问题了&#xff0c;始终无法使用vipca 创建 vip资源 &#xff0c; 叫我帮忙看看。 他用的是 vmware server 2.0 搭建 虚拟 rac 。 一. 环境如下  OS: Red Hat Enterprise …

python加权最小二乘_【Python】统计科学之加权最小二乘法

首页专栏python文章详情0统计科学之加权最小二乘法张俊红发布于 今天 10:03今天这篇来讲讲加权最小二乘法(WLS)&#xff0c;加权最小二乘是在普通的最小二乘回归(OLS)的基础上进行改造的&#xff0c;主要是用来解决异方差问题的。OLS的常规形式如下&#xff1a;我们在前面讲过O…

删除电脑中的mysql数据库吗_【数据库】怎么彻底删除mysql服务?

彻底删除mysql服务的步骤&#xff1a;1、关闭mysql服务在cmd命令行输入以下命令net stop mysql或者 我的电脑右键->管理->服务&#xff0c;进入后手动关闭。2、删除MySQL服务在cmd中&#xff0c;输入sc delete mysql&#xff0c;删除服务。但是MYSQL服务只是显示禁用状态…

mysql主从配置 简书_Mysql主从配置,实现读写分离-Go语言中文社区

转载&#xff1a;https://www.cnblogs.com/alvin_xp/p/4162249.html大型网站为了软解大量的并发访问&#xff0c;除了在网站实现分布式负载均衡&#xff0c;远远不够。到了数据业务层、数据访问层&#xff0c;如果还是传统的数据结构&#xff0c;或者只是单单靠一台服务器扛&am…

continue 的用户及实例

continue 跳出本次循环&#xff0c;继续下一次循环 “break”是跳出整个循环 实例1&#xff1a; for i in range(10): if i <5: continue    #这里条件是小于5&#xff0c;满足条件的就跳出了本次循环&#xff0c;不在执行print&#xff0c;所以最终打印的是5…

mysql报错注入实战_MySQL手工注入实战

实战记录&#xff0c;日本某站注入点 and 语句测试and11 返回正常&#xff0c;and2跳回首页&#xff0c;可能过滤了用 ’ 测试返回错误页面判断为注入点order by语句查询字段数测试字段数为9and 12 UNION SELECT 1,2,3,4,5,6,7,8,9报错联合查询语句&#xff0c;查询显示位2、3为…

20个简约风格网站设计作品欣赏

这篇文章收集了20个简洁清爽的网站设计作品案例&#xff0c;设计师们能够通过这些优秀的网页设计作品获得灵感&#xff0c;进而设计出更精美&#xff0c;更具有创意的网站作品&#xff0c;一起欣赏。vnsagaPure – Minimal WordPress themeAssemblydeladeeus design studioHocu…

python 股票自动交易从零开始_Python股票自动交易从零开始

课程目录1.Python股票自动交易从零开始~第一集~简介(Av24528809,P1).mp42.Python股票自动交易从零开始~第二集~安装工具包(Av24528809,P2).mp43.Python股票自动交易从零开始~第二集番外~配置Mac工作环境(Av24528809,P3).mp44.Python股票自动交易从零开始~第三集~获得股票列表-A…

python 银行工作_Python:银行系统实战(一)

最近突然抽筋想做一下大学时候做过的银行系统实战~代码就发在这里啦~学弟学妹们请查收~不过是python版本的&#xff0c;你们也用不上。。。两个py文件&#xff0c;一个是后台系统处理的&#xff0c;一个是总控py文件如下&#xff1a;view.py 内容如下&#xff1a;import timecl…

深入剖析LinkedList:揭秘底层原理

文章目录 一、 概述LinkedList1.1 LinkedList简介1.2 LinkedList的优点和缺点 二、 LinkedList数据结构分析2.1 Node节点结构体解析2.2 LinkedList实现了双向链表的原因2.3 LinkedList如何实现了链表的基本操作&#xff08;增删改查&#xff09;2.4 LinkedList的遍历方式 三、 …

mysql+server+80_Windows Server 2019 IIS10.0+PHP(FastCGI)+MySQL环境搭建教程

准备篇一、环境说明&#xff1a;操作系统&#xff1a;Windows Server 2019PHP版本&#xff1a;php 7.3.11MySQL版本&#xff1a;MySQL 8.0.18.0二、相关软件下载&#xff1a;1、PHP下载地址&#xff1a;https://windows.php.net/downloads/releases/php-7.3.11-nts-Win32-VC15-…

SharePoint Server和Office 365之间的混合模式集成概述

正如您可能已经知道的那样&#xff0c;云中的Microsoft Office 365和SharePoint Server 2013/2016内部部署可以通过多种方式协同工作。这些通常被称为混合模式&#xff0c;因为它们将功能集成到SharePoint Online和SharePoint内部部署中。 以下Microsoft提供了下对照表&#xf…

图片压缩

1&#xff09;一张图片如何显示到屏幕上 一个电脑显示器, 上面的像素点就是内存/显存一张图片表达的颜色信息赋值到那块内存就是图片显示2&#xff09;图片文件的格式 图片文件的格式&#xff0c;无论是哪一种&#xff0c;最终都要包含原始颜色数据 原始颜色数据 一个像素用rgb…

python io操作需要用到什么硬件_Python I/O 操作(一)

一、I/O 概念I/O 指的是相对内存而言的 input 和 output从文件、数据库、网络向内存中写入数据叫做 input从内存向文件、数据库、网络中输出数据叫做 outputI/O 操作相比 CPU 操作而言是极慢的&#xff0c;往往 CPU 运行一秒钟&#xff0c;I/O 要忙几个月&#xff0c;所以要提高…

fortinate防火墙使用本地用户三步开通PPTP ***

1. 建立用户Local用户及用户组 2. 启用PPTP ***拨号功能 3. 建立***地址&#xff0c;并设置策略&#xff1a;让***用户可以访问内部和外部 &#xff08;注&#xff1a;建***地址和策略时&#xff0c;接口选择是外部&#xff0c;因为是外部拨入的&#xff09; 完成上述三步&…