Skip to content

Commit 0073bc0

Browse files
committed
20190102
1 parent 899f1cf commit 0073bc0

File tree

4 files changed

+522
-2
lines changed

4 files changed

+522
-2
lines changed

.ipynb_checkpoints/Python_Learning_09-checkpoint.ipynb

Lines changed: 229 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -220,7 +220,7 @@
220220
},
221221
{
222222
"cell_type": "code",
223-
"execution_count": null,
223+
"execution_count": 2,
224224
"metadata": {},
225225
"outputs": [],
226226
"source": [
@@ -229,6 +229,234 @@
229229
"class B(A):\n",
230230
" pass"
231231
]
232+
},
233+
{
234+
"cell_type": "markdown",
235+
"metadata": {},
236+
"source": [
237+
"- 单继承与多继承的优缺点:\n",
238+
" - 单继承\n",
239+
" - 优点:传承有序逻辑清晰语法简单隐患少\n",
240+
" - 缺点:功能不能无限扩展,只能在当前唯一的继承链中扩展\n",
241+
" - 多继承\n",
242+
" - 优点:类的扩展方便\n",
243+
" - 缺点:类关系混乱\n",
244+
" - 菱形继承/钻石继承的问题\n",
245+
" - MRO解决多继承的问题\n",
246+
" - MRO多个继承中,用于保存继承顺序的一个列表\n",
247+
" - python本身采用C3 算法来解决多继承的问题\n",
248+
" - MRO列表的计算原则:\n",
249+
" - 子类永远继承父类\n",
250+
" - 如果出现多个继承,则根据继承语法中括号的书写顺序\n",
251+
" - 如果多个继承继承了同一个父类,孙子类只会选择语法括号中的第一个父类的父类"
252+
]
253+
},
254+
{
255+
"cell_type": "markdown",
256+
"metadata": {},
257+
"source": [
258+
"- 构成函数\n",
259+
" - 在对象进行实例化的时候,系统自动调用的一个函数叫做构造函数,通常此函数用来对实例对象进行初始化。\n",
260+
" - 构造函数一定\n"
261+
]
262+
},
263+
{
264+
"cell_type": "code",
265+
"execution_count": 12,
266+
"metadata": {},
267+
"outputs": [
268+
{
269+
"name": "stdout",
270+
"output_type": "stream",
271+
"text": [
272+
"in inint func\n",
273+
"B\n"
274+
]
275+
}
276+
],
277+
"source": [
278+
"class Person():\n",
279+
" #对Person进行实例化的时候\n",
280+
" #姓名要\n",
281+
" #年龄\n",
282+
" #构造函数初始化\n",
283+
" def __init__(self):\n",
284+
" self.name = \"yumi\"\n",
285+
" self.age = 18\n",
286+
" print(\"in inint func\")\n",
287+
"#实例化一个人\n",
288+
"p = Person()\n",
289+
"\n",
290+
"class A():\n",
291+
" def __init__(self):\n",
292+
" print(\"A\")\n",
293+
"class B(A):\n",
294+
" def __init__(self,name):\n",
295+
" print(\"B\")\n",
296+
"class C(B):\n",
297+
"# def __init__(self):\n",
298+
"# print(\"C\")\n",
299+
" pass\n",
300+
"D = C(\"yumi\")"
301+
]
302+
},
303+
{
304+
"cell_type": "code",
305+
"execution_count": 28,
306+
"metadata": {},
307+
"outputs": [
308+
{
309+
"name": "stdout",
310+
"output_type": "stream",
311+
"text": [
312+
"B\n",
313+
"new\n",
314+
"****************************************************************************************************\n",
315+
"B\n",
316+
"new\n"
317+
]
318+
}
319+
],
320+
"source": [
321+
"class A():\n",
322+
" def __init__(self):\n",
323+
" print(\"A\")\n",
324+
"class B(A):\n",
325+
" def __init__(self,name):\n",
326+
" print(\"B\")\n",
327+
"class C(B):\n",
328+
" def __init__(self,name):\n",
329+
" #调用父类函数\n",
330+
" B.__init__(self,name)\n",
331+
" #增加自己的功能\n",
332+
" print(\"new\")\n",
333+
"D = C(\"yumi\")\n",
334+
"\n",
335+
"print(\"*\"*100)\n",
336+
"\n",
337+
"class C(B):\n",
338+
" def __init__(self,name):\n",
339+
" #调用父类函数\n",
340+
" super(C,self).__init__(name)\n",
341+
" print(\"new\")\n",
342+
"D = C(\"yumi\") "
343+
]
344+
},
345+
{
346+
"cell_type": "markdown",
347+
"metadata": {},
348+
"source": [
349+
"## 6.3 多态\n",
350+
" - 多态就是一个对象在不同情况下有不同的状态出现\n",
351+
" - 多态不是语法,是一种设计思想\n",
352+
" - 多态性,一种调用方法,不同的执行效果\n",
353+
" - 多态:同一事物的多种形态,动物分人类,鸟类,鱼类\n",
354+
" \n",
355+
"- Mixin设计模式\n",
356+
" - 多继承语法来现实Mixin\n",
357+
" - 必须单一功能\n",
358+
" - 职责必须单一\n",
359+
" - Mixin不依赖子类实现\n",
360+
" - 子类没继承Mixin类,照样能工作\n",
361+
" \n",
362+
"- 优点\n",
363+
" - 使用Mixin可以在不对类进行任何修改的情况下,扩充功能\n",
364+
" - 可以方便维护不同的功能组件的划分\n",
365+
" - 可以根据需要调整类的组合\n",
366+
" - 可以避免创建很多新的类,导致类的继承混乱\n",
367+
" "
368+
]
369+
},
370+
{
371+
"cell_type": "code",
372+
"execution_count": 48,
373+
"metadata": {},
374+
"outputs": [
375+
{
376+
"name": "stdout",
377+
"output_type": "stream",
378+
"text": [
379+
"(<class '__main__.Tutor'>, <class '__main__.Teacher'>, <class '__main__.Student'>, <class '__main__.Person'>, <class 'object'>)\n",
380+
"{}\n",
381+
"{'__module__': '__main__', '__doc__': None}\n",
382+
"****************************************************************************************************\n",
383+
"(<class '__main__.NewTutor'>, <class '__main__.Person'>, <class '__main__.TeacherMixin'>, <class '__main__.StudentMixin'>, <class 'object'>)\n",
384+
"{}\n",
385+
"{'__module__': '__main__', '__doc__': None}\n"
386+
]
387+
}
388+
],
389+
"source": [
390+
"#Mixin案例\n",
391+
"class Person():\n",
392+
" def eat(self):\n",
393+
" print(\"eat\")\n",
394+
" def drink(self):\n",
395+
" print(\"drink\")\n",
396+
" def swim(self):\n",
397+
" print(\"swim\")\n",
398+
"class Teacher(Person):\n",
399+
" def work(self):\n",
400+
" print(\"work\")\n",
401+
"class Student(Person):\n",
402+
" def study(self):\n",
403+
" print(\"study\")\n",
404+
"class Tutor(Teacher,Student):\n",
405+
" pass\n",
406+
"yumi = Tutor()\n",
407+
"print(Tutor.__mro__)\n",
408+
"print(yumi.__dict__)\n",
409+
"print(Tutor.__dict__)\n",
410+
"print(\"*\"*100)\n",
411+
"class TeacherMixin():\n",
412+
" def work(self):\n",
413+
" print(\"work\")\n",
414+
"class StudentMixin():\n",
415+
" def study(self):\n",
416+
" print(\"study\")\n",
417+
"class NewTutor(Person,TeacherMixin,StudentMixin):\n",
418+
" pass\n",
419+
"delphi = NewTutor()\n",
420+
"print(NewTutor.__mro__)\n",
421+
"print(delphi.__dict__)\n",
422+
"print(NewTutor.__dict__)"
423+
]
424+
},
425+
{
426+
"cell_type": "markdown",
427+
"metadata": {},
428+
"source": [
429+
"## 6.4类的相关函数\n",
430+
"- issubclass检测一个类是另一个类的子类\n",
431+
"- isintance检测对象是否是一个类的实例\n",
432+
"- hasattr:检测成员\n",
433+
"- dir:获取对象列表"
434+
]
435+
},
436+
{
437+
"cell_type": "code",
438+
"execution_count": 49,
439+
"metadata": {},
440+
"outputs": [
441+
{
442+
"name": "stdout",
443+
"output_type": "stream",
444+
"text": [
445+
"Help on built-in function getattr in module builtins:\n",
446+
"\n",
447+
"getattr(...)\n",
448+
" getattr(object, name[, default]) -> value\n",
449+
" \n",
450+
" Get a named attribute from an object; getattr(x, 'y') is equivalent to x.y.\n",
451+
" When a default argument is given, it is returned when the attribute doesn't\n",
452+
" exist; without it, an exception is raised in that case.\n",
453+
"\n"
454+
]
455+
}
456+
],
457+
"source": [
458+
"help(getattr)"
459+
]
232460
}
233461
],
234462
"metadata": {
Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,6 @@
1+
{
2+
"cells": [],
3+
"metadata": {},
4+
"nbformat": 4,
5+
"nbformat_minor": 2
6+
}

0 commit comments

Comments
 (0)