Skip to content

Commit ca46af9

Browse files
committed
20181217
1 parent 8ca9ded commit ca46af9

File tree

2 files changed

+666
-20
lines changed

2 files changed

+666
-20
lines changed
Lines changed: 348 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,352 @@
11
{
2-
"cells": [],
3-
"metadata": {},
2+
"cells": [
3+
{
4+
"cell_type": "markdown",
5+
"metadata": {},
6+
"source": [
7+
"# OO python 面向对象\n",
8+
"\n",
9+
"- 面向对象编程\n",
10+
" - 基础\n",
11+
" - 共有私有\n",
12+
" - 继承\n",
13+
" - 组合, Minxi\n",
14+
"- 魔法函数\n",
15+
" - 魔法函数的概述\n",
16+
" - 构造类魔法函数\n",
17+
" - 运算类魔法函数\n",
18+
"## 1.面向对象的概述 (ObjectOriented,OO)\n",
19+
"- OOP思想\n",
20+
"- 完成事物首先想到是由模型构成的\n",
21+
"- 名词的概念\n",
22+
" - OO:面向对象\n",
23+
" - OOA:面对对象的分析\n",
24+
" - OOD:面向对象的设计\n",
25+
" - OOI:xxx的实现\n",
26+
" - OOP:xxx的编程\n",
27+
" - OOA > OOD > OOI 面向对象的实现过程\n",
28+
"## 2.类和对象的概念\n",
29+
"- 类: 抽象名词,代表一个类集合,有共性的事物\n",
30+
"- 对象: 具体的的事物,单个个体\n",
31+
"- 类 vS 对象\n",
32+
" - 类是抽象的,代表一大类事物\n",
33+
" - 对象是具体的额,代表一个类的单个个体\n",
34+
"- 类的内容:\n",
35+
" - 表明事物的特征,叫做属性(变量)\n",
36+
" - 表明事物的动作,称为成员的方法(函数)\n",
37+
"## 3.类的基本实现\n",
38+
"- 遵守变量的命名的规范\n",
39+
"- 大驼峰(有一个或者多个单词构成首字母大写,单词都相连)\n",
40+
"- 尽量跟系统命名相似的命名避开\n",
41+
"- 声明一个类:\n",
42+
" - 必须用赢class关键字\n",
43+
" - 类由属性和方法构成,其他不允许\n",
44+
" - 成员属性定义可以直接用变量赋值,如果没有值,可以用None"
45+
]
46+
},
47+
{
48+
"cell_type": "code",
49+
"execution_count": 17,
50+
"metadata": {},
51+
"outputs": [
52+
{
53+
"name": "stdout",
54+
"output_type": "stream",
55+
"text": [
56+
"18\n",
57+
"None\n",
58+
"I 在做作业\n"
59+
]
60+
}
61+
],
62+
"source": [
63+
"'''\n",
64+
"定义一个学生类\n",
65+
"'''\n",
66+
"#定义一个空类\n",
67+
"class Student():\n",
68+
" #pass 跳过\n",
69+
" pass\n",
70+
"yumi = Student()\n",
71+
"# print(yumi)\n",
72+
"class GoodStudent():\n",
73+
" name = None\n",
74+
" age = 18\n",
75+
" course = \"python\"\n",
76+
" def dohomework(self):\n",
77+
" print(\"I 在做作业\")\n",
78+
" return None\n",
79+
"\n",
80+
"yumi = GoodStudent()\n",
81+
"print(yumi.age)\n",
82+
"print(yumi.name)\n",
83+
"yumi.dohomework()"
84+
]
85+
},
86+
{
87+
"cell_type": "markdown",
88+
"metadata": {},
89+
"source": [
90+
"### 3.1 类的实例化\n",
91+
" 变量 = 类名()#实例化一个对象\n",
92+
"- 访问对象成员\n",
93+
" \n",
94+
" obj.成员属性名称\n",
95+
" obj.成员方法\n",
96+
"- 对象所有成员检查\n",
97+
" \n",
98+
" obj.__dict__ \n",
99+
"- 类的多有成员检测\n",
100+
"\n",
101+
" class_name.__dict__"
102+
]
103+
},
104+
{
105+
"cell_type": "code",
106+
"execution_count": 15,
107+
"metadata": {},
108+
"outputs": [
109+
{
110+
"data": {
111+
"text/plain": [
112+
"{}"
113+
]
114+
},
115+
"execution_count": 15,
116+
"metadata": {},
117+
"output_type": "execute_result"
118+
}
119+
],
120+
"source": [
121+
"yumi.__dict__\n",
122+
"# GoodStudent.__dict__"
123+
]
124+
},
125+
{
126+
"cell_type": "code",
127+
"execution_count": 18,
128+
"metadata": {},
129+
"outputs": [
130+
{
131+
"data": {
132+
"text/plain": [
133+
"mappingproxy({'__module__': '__main__',\n",
134+
" 'name': 'yumi',\n",
135+
" 'age': 25,\n",
136+
" '__dict__': <attribute '__dict__' of 'A' objects>,\n",
137+
" '__weakref__': <attribute '__weakref__' of 'A' objects>,\n",
138+
" '__doc__': None})"
139+
]
140+
},
141+
"execution_count": 18,
142+
"metadata": {},
143+
"output_type": "execute_result"
144+
}
145+
],
146+
"source": [
147+
"class A():\n",
148+
" name = \"yumi\"\n",
149+
" age = 25\n",
150+
"A.__dict__"
151+
]
152+
},
153+
{
154+
"cell_type": "markdown",
155+
"metadata": {},
156+
"source": [
157+
"## 4.类和对象的成员分析\n",
158+
"- 类和对象可以存储对象,可以归类所有,也可以归对象所有\n",
159+
"- 类存储成员时使用的是与类关联的一个对象\n",
160+
"- 独享存储成员是存储在当前对象中\n",
161+
"- 对象访问一个成员,如果对象中没有该成员,访问类的同名类的成员,如果对象中有成员,则访问的是对象的中的成员(不一样的赋值)\n",
162+
"- 创建对象的时候,类中的成员不会放入对象中,而得到一个空对成员\n",
163+
"- 对对象中成员赋值或者添加成员时,成员保存在对象中,而不会修改类成员\n",
164+
"\n"
165+
]
166+
},
167+
{
168+
"cell_type": "code",
169+
"execution_count": 21,
170+
"metadata": {},
171+
"outputs": [
172+
{
173+
"name": "stdout",
174+
"output_type": "stream",
175+
"text": [
176+
"140479857546968\n",
177+
"140479857546968\n"
178+
]
179+
}
180+
],
181+
"source": [
182+
"class A():\n",
183+
" name = \"yumi\"\n",
184+
" age = \"25\"\n",
185+
"a = A()\n",
186+
"print(id(a))\n",
187+
"a.name = \"yumi\"\n",
188+
"print(id(a))\n"
189+
]
190+
},
191+
{
192+
"cell_type": "markdown",
193+
"metadata": {},
194+
"source": [
195+
"## 5.关于self\n",
196+
"- self在对象的方法中表示当前对象本身,如果通过对象调用该方法,那么该对象会自动传入当前方法的第一个参数中\n",
197+
"- self不是关键字,只是接受对象的普通参数\n",
198+
"- 方法使用了self,为非绑定类的方法,可以通过对象访问,没有self的时绑定对类访问的\n",
199+
"- 使用类访问绑定类的方法时,如果类方法中需要访问当前类的成员,可以用__class__来访问\n"
200+
]
201+
},
202+
{
203+
"cell_type": "code",
204+
"execution_count": 19,
205+
"metadata": {},
206+
"outputs": [
207+
{
208+
"name": "stdout",
209+
"output_type": "stream",
210+
"text": [
211+
"my name is delphi\n",
212+
"my age is 29\n",
213+
"my name is delphi\n",
214+
"my age is 29\n"
215+
]
216+
}
217+
],
218+
"source": [
219+
"class StudentVol():\n",
220+
" name = \"yumi\"\n",
221+
" age = 25\n",
222+
" def say(self):\n",
223+
" self.name = \"delphi\"\n",
224+
" self.age = 29\n",
225+
" print(\"my name is {0}\".format(self.name))\n",
226+
" print(\"my age is {0}\".format(self.age))\n",
227+
" def sayAgain(s):\n",
228+
" print(\"my name is {0}\".format(s.name))\n",
229+
" print(\"my age is {0}\".format(s.age))\n",
230+
" return None\n",
231+
"a = StudentVol() \n",
232+
"a.say()\n",
233+
"a.sayAgain()"
234+
]
235+
},
236+
{
237+
"cell_type": "code",
238+
"execution_count": 30,
239+
"metadata": {},
240+
"outputs": [
241+
{
242+
"name": "stdout",
243+
"output_type": "stream",
244+
"text": [
245+
"delphi\n",
246+
"36\n",
247+
"delphi\n",
248+
"36\n",
249+
"yumi\n",
250+
"18\n",
251+
"aaaa\n",
252+
"20\n"
253+
]
254+
}
255+
],
256+
"source": [
257+
"class A():\n",
258+
" name = \"yumi\"\n",
259+
" age = 18\n",
260+
" \n",
261+
" def __init__(self):\n",
262+
" self.name = \"delphi\"\n",
263+
" self.age = 36\n",
264+
" def say(self):\n",
265+
" print(self.name)\n",
266+
" print(self.age)\n",
267+
"class B():\n",
268+
" name = \"aaaa\"\n",
269+
" age =20\n",
270+
"\n",
271+
" \n",
272+
"a = A()\n",
273+
"a.say()\n",
274+
"\n",
275+
"A.say(a)\n",
276+
"A.say(A)\n",
277+
"A.say(B)\n",
278+
"#鸭子模型,只有有呱呱叫,有翅膀,不游泳的就是鸭子"
279+
]
280+
},
281+
{
282+
"cell_type": "markdown",
283+
"metadata": {},
284+
"source": [
285+
"## 6.面向对象的三大特征\n",
286+
"- 封装\n",
287+
"- 继承\n",
288+
"- 多态\n",
289+
"### 6.1 封装\n",
290+
"- 封装就是对对象的成员进行访问限制\n",
291+
" - 公开 public\n",
292+
" - 受保护的 protected\n",
293+
" - 私有的 private\n",
294+
" public.protected.pribate都不是关键字\n",
295+
"- 判断对象位置\n",
296+
" - 对象内部\n",
297+
" - 对象外部\n",
298+
" - 子类中\n",
299+
"- 私有\n",
300+
" - 私有成员时最高级别的封装,只能在当前类或对象中访问\n",
301+
" - 在成员前面加两个__\n",
302+
" - "
303+
]
304+
},
305+
{
306+
"cell_type": "code",
307+
"execution_count": 39,
308+
"metadata": {},
309+
"outputs": [
310+
{
311+
"name": "stdout",
312+
"output_type": "stream",
313+
"text": [
314+
"{'__module__': '__main__', 'name': 'aaaa', '_Cc__age': 20, '__dict__': <attribute '__dict__' of 'Cc' objects>, '__weakref__': <attribute '__weakref__' of 'Cc' objects>, '__doc__': None}\n",
315+
"aaaa\n"
316+
]
317+
},
318+
{
319+
"ename": "AttributeError",
320+
"evalue": "'Cc' object has no attribute '__age'",
321+
"output_type": "error",
322+
"traceback": [
323+
"\u001b[0;31m---------------------------------------------------------------------------\u001b[0m",
324+
"\u001b[0;31mAttributeError\u001b[0m Traceback (most recent call last)",
325+
"\u001b[0;32m<ipython-input-39-32393da89076>\u001b[0m in \u001b[0;36m<module>\u001b[0;34m\u001b[0m\n\u001b[1;32m 7\u001b[0m \u001b[0mprint\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mCc\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0m__dict__\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 8\u001b[0m \u001b[0mprint\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mb\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mname\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m----> 9\u001b[0;31m \u001b[0mprint\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mb\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0m__age\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m",
326+
"\u001b[0;31mAttributeError\u001b[0m: 'Cc' object has no attribute '__age'"
327+
]
328+
}
329+
],
330+
"source": [
331+
"\n",
332+
"class Cc():\n",
333+
" name = \"aaaa\"\n",
334+
" __age =20\n",
335+
"\n",
336+
"b = Cc()\n",
337+
"print(Cc.__dict__)\n",
338+
"print(b.name)\n",
339+
"print(b.__age)\n"
340+
]
341+
}
342+
],
343+
"metadata": {
344+
"kernelspec": {
345+
"display_name": "Python 3",
346+
"language": "python",
347+
"name": "python3"
348+
}
349+
},
4350
"nbformat": 4,
5351
"nbformat_minor": 2
6352
}

0 commit comments

Comments
 (0)