You can not select more than 25 topics Topics must start with a chinese character,a letter or number, can include dashes ('-') and can be up to 35 characters long.

7_Class.ipynb 33 kB

6 years ago
6 years ago
6 years ago
6 years ago
6 years ago
6 years ago
6 years ago
6 years ago
6 years ago
6 years ago
6 years ago
6 years ago
6 years ago
6 years ago
6 years ago
6 years ago
6 years ago
6 years ago
6 years ago
6 years ago
6 years ago
6 years ago
6 years ago
6 years ago
6 years ago
6 years ago
6 years ago
6 years ago
6 years ago
6 years ago
6 years ago
6 years ago
6 years ago
6 years ago
6 years ago
6 years ago
6 years ago
6 years ago
6 years ago
6 years ago
6 years ago
6 years ago
6 years ago
6 years ago
6 years ago
6 years ago
6 years ago
6 years ago
6 years ago
6 years ago
6 years ago
6 years ago
6 years ago
6 years ago
6 years ago
6 years ago
6 years ago
6 years ago
6 years ago
6 years ago
6 years ago
6 years ago
6 years ago
6 years ago
6 years ago
6 years ago
6 years ago
6 years ago
6 years ago
6 years ago
6 years ago
6 years ago
6 years ago
6 years ago
6 years ago
6 years ago
6 years ago
6 years ago
6 years ago
6 years ago
6 years ago
6 years ago
6 years ago
6 years ago
6 years ago
6 years ago
6 years ago
6 years ago
6 years ago
6 years ago
6 years ago
6 years ago
6 years ago
6 years ago
6 years ago
6 years ago
6 years ago
6 years ago
6 years ago
6 years ago
6 years ago
6 years ago
6 years ago
6 years ago
6 years ago
6 years ago
6 years ago
6 years ago
6 years ago
6 years ago
6 years ago
6 years ago
6 years ago
6 years ago
6 years ago
6 years ago
6 years ago
6 years ago
6 years ago
6 years ago
6 years ago
6 years ago
6 years ago
6 years ago
6 years ago
6 years ago
6 years ago
6 years ago
6 years ago
6 years ago
6 years ago
6 years ago
1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495969798991001011021031041051061071081091101111121131141151161171181191201211221231241251261271281291301311321331341351361371381391401411421431441451461471481491501511521531541551561571581591601611621631641651661671681691701711721731741751761771781791801811821831841851861871881891901911921931941951961971981992002012022032042052062072082092102112122132142152162172182192202212222232242252262272282292302312322332342352362372382392402412422432442452462472482492502512522532542552562572582592602612622632642652662672682692702712722732742752762772782792802812822832842852862872882892902912922932942952962972982993003013023033043053063073083093103113123133143153163173183193203213223233243253263273283293303313323333343353363373383393403413423433443453463473483493503513523533543553563573583593603613623633643653663673683693703713723733743753763773783793803813823833843853863873883893903913923933943953963973983994004014024034044054064074084094104114124134144154164174184194204214224234244254264274284294304314324334344354364374384394404414424434444454464474484494504514524534544554564574584594604614624634644654664674684694704714724734744754764774784794804814824834844854864874884894904914924934944954964974984995005015025035045055065075085095105115125135145155165175185195205215225235245255265275285295305315325335345355365375385395405415425435445455465475485495505515525535545555565575585595605615625635645655665675685695705715725735745755765775785795805815825835845855865875885895905915925935945955965975985996006016026036046056066076086096106116126136146156166176186196206216226236246256266276286296306316326336346356366376386396406416426436446456466476486496506516526536546556566576586596606616626636646656666676686696706716726736746756766776786796806816826836846856866876886896906916926936946956966976986997007017027037047057067077087097107117127137147157167177187197207217227237247257267277287297307317327337347357367377387397407417427437447457467477487497507517527537547557567577587597607617627637647657667677687697707717727737747757767777787797807817827837847857867877887897907917927937947957967977987998008018028038048058068078088098108118128138148158168178188198208218228238248258268278288298308318328338348358368378388398408418428438448458468478488498508518528538548558568578588598608618628638648658668678688698708718728738748758768778788798808818828838848858868878888898908918928938948958968978988999009019029039049059069079089099109119129139149159169179189199209219229239249259269279289299309319329339349359369379389399409419429439449459469479489499509519529539549559569579589599609619629639649659669679689699709719729739749759769779789799809819829839849859869879889899909919929939949959969979989991000100110021003100410051006100710081009101010111012101310141015101610171018101910201021102210231024102510261027102810291030103110321033103410351036103710381039104010411042104310441045104610471048104910501051105210531054105510561057105810591060106110621063106410651066106710681069107010711072107310741075107610771078107910801081108210831084108510861087108810891090109110921093109410951096109710981099110011011102110311041105110611071108110911101111111211131114111511161117111811191120112111221123112411251126112711281129113011311132113311341135113611371138113911401141114211431144114511461147114811491150115111521153115411551156115711581159116011611162116311641165116611671168116911701171117211731174117511761177117811791180118111821183118411851186118711881189119011911192119311941195119611971198119912001201120212031204120512061207120812091210121112121213121412151216121712181219122012211222122312241225122612271228122912301231123212331234123512361237123812391240124112421243124412451246124712481249125012511252125312541255125612571258125912601261126212631264126512661267126812691270127112721273127412751276127712781279128012811282128312841285128612871288128912901291129212931294129512961297129812991300130113021303130413051306130713081309131013111312131313141315131613171318131913201321132213231324132513261327132813291330133113321333133413351336133713381339
  1. {
  2. "cells": [
  3. {
  4. "cell_type": "markdown",
  5. "metadata": {},
  6. "source": [
  7. "# 1. 类"
  8. ]
  9. },
  10. {
  11. "cell_type": "markdown",
  12. "metadata": {},
  13. "source": [
  14. "Python中的变量、列表、字典等都是对象。不涉及面向对象编程的理论部分,在本教程中对概念进行解释。"
  15. ]
  16. },
  17. {
  18. "cell_type": "markdown",
  19. "metadata": {},
  20. "source": [
  21. "类声明如下"
  22. ]
  23. },
  24. {
  25. "cell_type": "markdown",
  26. "metadata": {},
  27. "source": [
  28. "class class_name:\n",
  29. "\n",
  30. " Functions"
  31. ]
  32. },
  33. {
  34. "cell_type": "code",
  35. "execution_count": 1,
  36. "metadata": {},
  37. "outputs": [],
  38. "source": [
  39. "class FirstClass:\n",
  40. " pass\n"
  41. ]
  42. },
  43. {
  44. "cell_type": "markdown",
  45. "metadata": {},
  46. "source": [
  47. "**pass** 在python中意味着什么都不做。 "
  48. ]
  49. },
  50. {
  51. "cell_type": "markdown",
  52. "metadata": {},
  53. "source": [
  54. "上面声明了一个名为“FirstClass”的类对象,现在考虑一个具有“FirstClass”所有特征的“egclass”。所以你所要做的就是,将“egclass”等同于“FirstClass”。在python术语中,这称为创建实例。“egclass”是“FirstClass”的实例"
  55. ]
  56. },
  57. {
  58. "cell_type": "code",
  59. "execution_count": 2,
  60. "metadata": {},
  61. "outputs": [],
  62. "source": [
  63. "egclass = FirstClass()"
  64. ]
  65. },
  66. {
  67. "cell_type": "code",
  68. "execution_count": 3,
  69. "metadata": {},
  70. "outputs": [
  71. {
  72. "data": {
  73. "text/plain": [
  74. "__main__.FirstClass"
  75. ]
  76. },
  77. "execution_count": 3,
  78. "metadata": {},
  79. "output_type": "execute_result"
  80. }
  81. ],
  82. "source": [
  83. "type(egclass)"
  84. ]
  85. },
  86. {
  87. "cell_type": "code",
  88. "execution_count": 4,
  89. "metadata": {},
  90. "outputs": [
  91. {
  92. "data": {
  93. "text/plain": [
  94. "type"
  95. ]
  96. },
  97. "execution_count": 4,
  98. "metadata": {},
  99. "output_type": "execute_result"
  100. }
  101. ],
  102. "source": [
  103. "type(FirstClass)"
  104. ]
  105. },
  106. {
  107. "cell_type": "markdown",
  108. "metadata": {},
  109. "source": [
  110. "现在让我们向类中添加一些“功能”。这样我们的FirstClass就有了更好的定义。类内的函数被称为该类的“方法”"
  111. ]
  112. },
  113. {
  114. "cell_type": "markdown",
  115. "metadata": {},
  116. "source": [
  117. "大多数类都有一个名为“\\_\\_init\\_\\_”的函数。这些被称为魔术方法。在这个方法中,你基本上初始化了这个类的变量,或者任何适用于这个方法中指定的所有方法的初始化算法。类中的变量称为属性。"
  118. ]
  119. },
  120. {
  121. "cell_type": "markdown",
  122. "metadata": {},
  123. "source": [
  124. "这有助于简化实例的初始化过程。例如,\n",
  125. "\n",
  126. "在不使用魔法方法或被成为构造函数的\\_\\_init\\_\\_ 的情况下,我们必须定义一个**init()** 方法并调用**init()** 函数。"
  127. ]
  128. },
  129. {
  130. "cell_type": "code",
  131. "execution_count": 8,
  132. "metadata": {},
  133. "outputs": [
  134. {
  135. "ename": "AttributeError",
  136. "evalue": "'FirstClass' object has no attribute 'init'",
  137. "output_type": "error",
  138. "traceback": [
  139. "\u001b[0;31m---------------------------------------------------------------------------\u001b[0m",
  140. "\u001b[0;31mAttributeError\u001b[0m Traceback (most recent call last)",
  141. "\u001b[0;32m<ipython-input-8-d15e7b8e3d78>\u001b[0m in \u001b[0;36m<module>\u001b[0;34m()\u001b[0m\n\u001b[1;32m 1\u001b[0m \u001b[0meg0\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0mFirstClass\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m----> 2\u001b[0;31m \u001b[0meg0\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0minit\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m",
  142. "\u001b[0;31mAttributeError\u001b[0m: 'FirstClass' object has no attribute 'init'"
  143. ]
  144. }
  145. ],
  146. "source": [
  147. "eg0 = FirstClass()\n",
  148. "eg0.init()"
  149. ]
  150. },
  151. {
  152. "cell_type": "markdown",
  153. "metadata": {},
  154. "source": [
  155. "但是当构造函数被定义后,\\_\\_init\\_\\_被调用,这样初始化实例被创建。"
  156. ]
  157. },
  158. {
  159. "cell_type": "markdown",
  160. "metadata": {},
  161. "source": [
  162. "我们构造我们的\"FirstClass\"去接受两个变量名称和符号。\n",
  163. "\n",
  164. "我将会在稍后解释\"self\"。"
  165. ]
  166. },
  167. {
  168. "cell_type": "code",
  169. "execution_count": 13,
  170. "metadata": {},
  171. "outputs": [],
  172. "source": [
  173. "class FirstClass:\n",
  174. " \"\"\"My first class\"\"\"\n",
  175. " def __init__(self,name,symbol):\n",
  176. " self.name = name\n",
  177. " self.symbol = symbol"
  178. ]
  179. },
  180. {
  181. "cell_type": "markdown",
  182. "metadata": {},
  183. "source": [
  184. "现在我们已经定义了一个函数而且添加了\\_\\_init\\_\\_方法。我们可以创建一个名为FirstClass的实例,该实例现在接受两个参数。"
  185. ]
  186. },
  187. {
  188. "cell_type": "code",
  189. "execution_count": 18,
  190. "metadata": {},
  191. "outputs": [],
  192. "source": [
  193. "eg1 = FirstClass('one',1)\n",
  194. "eg2 = FirstClass('two',2)"
  195. ]
  196. },
  197. {
  198. "cell_type": "code",
  199. "execution_count": 20,
  200. "metadata": {},
  201. "outputs": [
  202. {
  203. "name": "stdout",
  204. "output_type": "stream",
  205. "text": [
  206. "onex 11\n",
  207. "two 2\n",
  208. "My first class\n"
  209. ]
  210. }
  211. ],
  212. "source": [
  213. "print(eg1.name, eg1.symbol)\n",
  214. "print(eg2.name, eg2.symbol)\n",
  215. "print(eg1.__doc__)"
  216. ]
  217. },
  218. {
  219. "cell_type": "markdown",
  220. "metadata": {},
  221. "source": [
  222. "**dir( )** 函数在查看类包含什么以及它提供了什么方法时非常方便。"
  223. ]
  224. },
  225. {
  226. "cell_type": "code",
  227. "execution_count": 16,
  228. "metadata": {
  229. "scrolled": false
  230. },
  231. "outputs": [
  232. {
  233. "data": {
  234. "text/plain": [
  235. "['__class__',\n",
  236. " '__delattr__',\n",
  237. " '__dict__',\n",
  238. " '__dir__',\n",
  239. " '__doc__',\n",
  240. " '__eq__',\n",
  241. " '__format__',\n",
  242. " '__ge__',\n",
  243. " '__getattribute__',\n",
  244. " '__gt__',\n",
  245. " '__hash__',\n",
  246. " '__init__',\n",
  247. " '__le__',\n",
  248. " '__lt__',\n",
  249. " '__module__',\n",
  250. " '__ne__',\n",
  251. " '__new__',\n",
  252. " '__reduce__',\n",
  253. " '__reduce_ex__',\n",
  254. " '__repr__',\n",
  255. " '__setattr__',\n",
  256. " '__sizeof__',\n",
  257. " '__str__',\n",
  258. " '__subclasshook__',\n",
  259. " '__weakref__']"
  260. ]
  261. },
  262. "execution_count": 16,
  263. "metadata": {},
  264. "output_type": "execute_result"
  265. }
  266. ],
  267. "source": [
  268. "dir(FirstClass)"
  269. ]
  270. },
  271. {
  272. "cell_type": "code",
  273. "execution_count": 24,
  274. "metadata": {},
  275. "outputs": [
  276. {
  277. "data": {
  278. "text/plain": [
  279. "'My first class'"
  280. ]
  281. },
  282. "execution_count": 24,
  283. "metadata": {},
  284. "output_type": "execute_result"
  285. }
  286. ],
  287. "source": [
  288. "FirstClass.__doc__"
  289. ]
  290. },
  291. {
  292. "cell_type": "markdown",
  293. "metadata": {},
  294. "source": [
  295. "实例的**dir()** 也显示了它定义的属性。"
  296. ]
  297. },
  298. {
  299. "cell_type": "code",
  300. "execution_count": 25,
  301. "metadata": {},
  302. "outputs": [
  303. {
  304. "data": {
  305. "text/plain": [
  306. "['__class__',\n",
  307. " '__delattr__',\n",
  308. " '__dict__',\n",
  309. " '__dir__',\n",
  310. " '__doc__',\n",
  311. " '__eq__',\n",
  312. " '__format__',\n",
  313. " '__ge__',\n",
  314. " '__getattribute__',\n",
  315. " '__gt__',\n",
  316. " '__hash__',\n",
  317. " '__init__',\n",
  318. " '__le__',\n",
  319. " '__lt__',\n",
  320. " '__module__',\n",
  321. " '__ne__',\n",
  322. " '__new__',\n",
  323. " '__reduce__',\n",
  324. " '__reduce_ex__',\n",
  325. " '__repr__',\n",
  326. " '__setattr__',\n",
  327. " '__sizeof__',\n",
  328. " '__str__',\n",
  329. " '__subclasshook__',\n",
  330. " '__weakref__',\n",
  331. " 'name',\n",
  332. " 'symbol']"
  333. ]
  334. },
  335. "execution_count": 25,
  336. "metadata": {},
  337. "output_type": "execute_result"
  338. }
  339. ],
  340. "source": [
  341. "dir(eg1)"
  342. ]
  343. },
  344. {
  345. "cell_type": "markdown",
  346. "metadata": {},
  347. "source": [
  348. "稍微改变一下FirstClass函数,"
  349. ]
  350. },
  351. {
  352. "cell_type": "code",
  353. "execution_count": 21,
  354. "metadata": {},
  355. "outputs": [],
  356. "source": [
  357. "class FirstClass:\n",
  358. " def __init__(self,name,symbol):\n",
  359. " self.n = name\n",
  360. " self.s = symbol"
  361. ]
  362. },
  363. {
  364. "cell_type": "markdown",
  365. "metadata": {},
  366. "source": [
  367. "将self.name和self.symbol转化成self.n和self.s会得到:"
  368. ]
  369. },
  370. {
  371. "cell_type": "code",
  372. "execution_count": 22,
  373. "metadata": {},
  374. "outputs": [],
  375. "source": [
  376. "eg1 = FirstClass('one',1)\n",
  377. "eg2 = FirstClass('two',2)"
  378. ]
  379. },
  380. {
  381. "cell_type": "code",
  382. "execution_count": 23,
  383. "metadata": {},
  384. "outputs": [
  385. {
  386. "ename": "AttributeError",
  387. "evalue": "'FirstClass' object has no attribute 'name'",
  388. "output_type": "error",
  389. "traceback": [
  390. "\u001b[0;31m---------------------------------------------------------------------------\u001b[0m",
  391. "\u001b[0;31mAttributeError\u001b[0m Traceback (most recent call last)",
  392. "\u001b[0;32m<ipython-input-23-4ab7dec1c737>\u001b[0m in \u001b[0;36m<module>\u001b[0;34m()\u001b[0m\n\u001b[0;32m----> 1\u001b[0;31m \u001b[0mprint\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0meg1\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mname\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0meg1\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0msymbol\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m\u001b[1;32m 2\u001b[0m \u001b[0mprint\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0meg2\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mname\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0meg2\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0msymbol\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n",
  393. "\u001b[0;31mAttributeError\u001b[0m: 'FirstClass' object has no attribute 'name'"
  394. ]
  395. }
  396. ],
  397. "source": [
  398. "print(eg1.name, eg1.symbol)\n",
  399. "print(eg2.name, eg2.symbol)"
  400. ]
  401. },
  402. {
  403. "cell_type": "markdown",
  404. "metadata": {},
  405. "source": [
  406. "AttributeError, 还记得变量就是类中的属性吗?因此,这意味着我们没有为实例提供正确的属性。"
  407. ]
  408. },
  409. {
  410. "cell_type": "code",
  411. "execution_count": 24,
  412. "metadata": {},
  413. "outputs": [
  414. {
  415. "data": {
  416. "text/plain": [
  417. "['__class__',\n",
  418. " '__delattr__',\n",
  419. " '__dict__',\n",
  420. " '__dir__',\n",
  421. " '__doc__',\n",
  422. " '__eq__',\n",
  423. " '__format__',\n",
  424. " '__ge__',\n",
  425. " '__getattribute__',\n",
  426. " '__gt__',\n",
  427. " '__hash__',\n",
  428. " '__init__',\n",
  429. " '__le__',\n",
  430. " '__lt__',\n",
  431. " '__module__',\n",
  432. " '__ne__',\n",
  433. " '__new__',\n",
  434. " '__reduce__',\n",
  435. " '__reduce_ex__',\n",
  436. " '__repr__',\n",
  437. " '__setattr__',\n",
  438. " '__sizeof__',\n",
  439. " '__str__',\n",
  440. " '__subclasshook__',\n",
  441. " '__weakref__',\n",
  442. " 'n',\n",
  443. " 's']"
  444. ]
  445. },
  446. "execution_count": 24,
  447. "metadata": {},
  448. "output_type": "execute_result"
  449. }
  450. ],
  451. "source": [
  452. "dir(eg1)"
  453. ]
  454. },
  455. {
  456. "cell_type": "code",
  457. "execution_count": 15,
  458. "metadata": {},
  459. "outputs": [
  460. {
  461. "name": "stdout",
  462. "output_type": "stream",
  463. "text": [
  464. "one 1\n",
  465. "two 2\n"
  466. ]
  467. }
  468. ],
  469. "source": [
  470. "print(eg1.n, eg1.s)\n",
  471. "print(eg2.n, eg2.s)"
  472. ]
  473. },
  474. {
  475. "cell_type": "markdown",
  476. "metadata": {},
  477. "source": [
  478. "现在我们解决了这个错误。现在让我们比较一下我们看到的两个例子。\n",
  479. "\n",
  480. "当我声明self.name和self.symbol时,使用eg1.name和eg1.symbol没有属性错误。当我声明self.n和self.s时,使用eg1.n和eg1.s没有属性错误。\n",
  481. "\n",
  482. "从以上我们可以得出self就是实例本身。\n",
  483. "\n",
  484. "记住,self不是预定义的,它是用户定义的。你可以利用任何你觉得舒服的东西。但是使用self已经成为一种常见的做法。"
  485. ]
  486. },
  487. {
  488. "cell_type": "code",
  489. "execution_count": 1,
  490. "metadata": {},
  491. "outputs": [],
  492. "source": [
  493. "class FirstClass:\n",
  494. " def __init__(asdf1234,name,symbol):\n",
  495. " asdf1234.n = name\n",
  496. " asdf1234.s = symbol"
  497. ]
  498. },
  499. {
  500. "cell_type": "code",
  501. "execution_count": 17,
  502. "metadata": {
  503. "collapsed": true
  504. },
  505. "outputs": [],
  506. "source": [
  507. "eg1 = FirstClass('one',1)\n",
  508. "eg2 = FirstClass('two',2)"
  509. ]
  510. },
  511. {
  512. "cell_type": "code",
  513. "execution_count": 18,
  514. "metadata": {},
  515. "outputs": [
  516. {
  517. "name": "stdout",
  518. "output_type": "stream",
  519. "text": [
  520. "one 1\n",
  521. "two 2\n"
  522. ]
  523. }
  524. ],
  525. "source": [
  526. "print(eg1.n, eg1.s)\n",
  527. "print(eg2.n, eg2.s)"
  528. ]
  529. },
  530. {
  531. "cell_type": "markdown",
  532. "metadata": {},
  533. "source": [
  534. "因为eg1和eg2是FirstClass的实例,所以它不需要被限制在FirstClass本身。它可以通过声明其他属性来扩展自己,而不需要在FirstClass中声明属性。"
  535. ]
  536. },
  537. {
  538. "cell_type": "code",
  539. "execution_count": 25,
  540. "metadata": {},
  541. "outputs": [],
  542. "source": [
  543. "eg1.cube = 1\n",
  544. "eg2.cube = 8"
  545. ]
  546. },
  547. {
  548. "cell_type": "code",
  549. "execution_count": 26,
  550. "metadata": {},
  551. "outputs": [
  552. {
  553. "data": {
  554. "text/plain": [
  555. "['__class__',\n",
  556. " '__delattr__',\n",
  557. " '__dict__',\n",
  558. " '__dir__',\n",
  559. " '__doc__',\n",
  560. " '__eq__',\n",
  561. " '__format__',\n",
  562. " '__ge__',\n",
  563. " '__getattribute__',\n",
  564. " '__gt__',\n",
  565. " '__hash__',\n",
  566. " '__init__',\n",
  567. " '__le__',\n",
  568. " '__lt__',\n",
  569. " '__module__',\n",
  570. " '__ne__',\n",
  571. " '__new__',\n",
  572. " '__reduce__',\n",
  573. " '__reduce_ex__',\n",
  574. " '__repr__',\n",
  575. " '__setattr__',\n",
  576. " '__sizeof__',\n",
  577. " '__str__',\n",
  578. " '__subclasshook__',\n",
  579. " '__weakref__',\n",
  580. " 'cube',\n",
  581. " 'n',\n",
  582. " 's']"
  583. ]
  584. },
  585. "execution_count": 26,
  586. "metadata": {},
  587. "output_type": "execute_result"
  588. }
  589. ],
  590. "source": [
  591. "dir(eg1)"
  592. ]
  593. },
  594. {
  595. "cell_type": "markdown",
  596. "metadata": {
  597. "collapsed": true
  598. },
  599. "source": [
  600. "就像我们前面看到的全局变量和局部变量一样,即使类也有自己的变量类型。\n",
  601. "\n",
  602. "类属性:在方法外部定义的属性,适用于所有实例。\n",
  603. "\n",
  604. "实例属性:在方法内部定义的属性,只适用于该方法,并且对每个实例都是唯一的。"
  605. ]
  606. },
  607. {
  608. "cell_type": "code",
  609. "execution_count": 27,
  610. "metadata": {},
  611. "outputs": [],
  612. "source": [
  613. "class FirstClass:\n",
  614. " test = 'test'\n",
  615. " def __init__(self,name,symbol):\n",
  616. " self.name = name\n",
  617. " self.symbol = symbol"
  618. ]
  619. },
  620. {
  621. "cell_type": "markdown",
  622. "metadata": {},
  623. "source": [
  624. "这里test是一个类属性,而name是一个实例属性。"
  625. ]
  626. },
  627. {
  628. "cell_type": "code",
  629. "execution_count": 28,
  630. "metadata": {},
  631. "outputs": [
  632. {
  633. "name": "stdout",
  634. "output_type": "stream",
  635. "text": [
  636. "test4\n"
  637. ]
  638. }
  639. ],
  640. "source": [
  641. "eg3 = FirstClass('Three',3)\n",
  642. "eg4 = FirstClass('Four', 4)\n",
  643. "eg4.test = 'test4'\n",
  644. "print(eg4.test)"
  645. ]
  646. },
  647. {
  648. "cell_type": "code",
  649. "execution_count": 30,
  650. "metadata": {},
  651. "outputs": [
  652. {
  653. "name": "stdout",
  654. "output_type": "stream",
  655. "text": [
  656. "test Three\n"
  657. ]
  658. }
  659. ],
  660. "source": [
  661. "print(eg3.test, eg3.name)"
  662. ]
  663. },
  664. {
  665. "cell_type": "markdown",
  666. "metadata": {},
  667. "source": [
  668. "让我们添加更多的方法到FirstClass。"
  669. ]
  670. },
  671. {
  672. "cell_type": "code",
  673. "execution_count": 34,
  674. "metadata": {},
  675. "outputs": [],
  676. "source": [
  677. "class FirstClass:\n",
  678. " def __init__(self,name,symbol):\n",
  679. " self.name = name\n",
  680. " self.symbol = symbol\n",
  681. " def square(self):\n",
  682. " return self.symbol * self.symbol\n",
  683. " def cube(self):\n",
  684. " return self.symbol * self.symbol * self.symbol\n",
  685. " def multiply(self, x):\n",
  686. " return self.symbol * x"
  687. ]
  688. },
  689. {
  690. "cell_type": "code",
  691. "execution_count": 35,
  692. "metadata": {},
  693. "outputs": [],
  694. "source": [
  695. "eg4 = FirstClass('Five',5)"
  696. ]
  697. },
  698. {
  699. "cell_type": "code",
  700. "execution_count": 37,
  701. "metadata": {},
  702. "outputs": [
  703. {
  704. "name": "stdout",
  705. "output_type": "stream",
  706. "text": [
  707. "25\n",
  708. "125\n"
  709. ]
  710. }
  711. ],
  712. "source": [
  713. "print(eg4.square())\n",
  714. "print(eg4.cube())"
  715. ]
  716. },
  717. {
  718. "cell_type": "code",
  719. "execution_count": 27,
  720. "metadata": {},
  721. "outputs": [
  722. {
  723. "data": {
  724. "text/plain": [
  725. "10"
  726. ]
  727. },
  728. "execution_count": 27,
  729. "metadata": {},
  730. "output_type": "execute_result"
  731. }
  732. ],
  733. "source": [
  734. "eg4.multiply(2)"
  735. ]
  736. },
  737. {
  738. "cell_type": "markdown",
  739. "metadata": {},
  740. "source": [
  741. "以上也可以写成:"
  742. ]
  743. },
  744. {
  745. "cell_type": "code",
  746. "execution_count": 5,
  747. "metadata": {},
  748. "outputs": [
  749. {
  750. "ename": "AttributeError",
  751. "evalue": "type object 'FirstClass' has no attribute 'multiply'",
  752. "output_type": "error",
  753. "traceback": [
  754. "\u001b[0;31m---------------------------------------------------------------------------\u001b[0m",
  755. "\u001b[0;31mAttributeError\u001b[0m Traceback (most recent call last)",
  756. "\u001b[0;32m<ipython-input-5-448ee6ad2a26>\u001b[0m in \u001b[0;36m<module>\u001b[0;34m\u001b[0m\n\u001b[0;32m----> 1\u001b[0;31m \u001b[0mFirstClass\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mmultiply\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0meg4\u001b[0m\u001b[0;34m,\u001b[0m\u001b[0;36m2\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m",
  757. "\u001b[0;31mAttributeError\u001b[0m: type object 'FirstClass' has no attribute 'multiply'"
  758. ]
  759. }
  760. ],
  761. "source": [
  762. "FirstClass.multiply(eg4,2)"
  763. ]
  764. },
  765. {
  766. "cell_type": "markdown",
  767. "metadata": {},
  768. "source": [
  769. "## 2. 继承"
  770. ]
  771. },
  772. {
  773. "cell_type": "markdown",
  774. "metadata": {},
  775. "source": [
  776. "在某些情况下,新类可能具有已定义类以前的所有特征。因此,新类可以“继承”前一个类,并向其添加自己的方法。这称为继承。"
  777. ]
  778. },
  779. {
  780. "cell_type": "markdown",
  781. "metadata": {},
  782. "source": [
  783. "考虑类SoftwareEngineer具有薪水的方法。"
  784. ]
  785. },
  786. {
  787. "cell_type": "code",
  788. "execution_count": 38,
  789. "metadata": {},
  790. "outputs": [],
  791. "source": [
  792. "class SoftwareEngineer:\n",
  793. " def __init__(self,name,age):\n",
  794. " self.name = name\n",
  795. " self.age = age\n",
  796. " def salary(self, value):\n",
  797. " self.money = value\n",
  798. " print(self.name,\"earns\",self.money)"
  799. ]
  800. },
  801. {
  802. "cell_type": "code",
  803. "execution_count": 39,
  804. "metadata": {},
  805. "outputs": [],
  806. "source": [
  807. "a = SoftwareEngineer('Kartik',26)"
  808. ]
  809. },
  810. {
  811. "cell_type": "code",
  812. "execution_count": 40,
  813. "metadata": {},
  814. "outputs": [
  815. {
  816. "name": "stdout",
  817. "output_type": "stream",
  818. "text": [
  819. "Kartik earns 40000\n"
  820. ]
  821. }
  822. ],
  823. "source": [
  824. "a.salary(40000)"
  825. ]
  826. },
  827. {
  828. "cell_type": "code",
  829. "execution_count": 41,
  830. "metadata": {},
  831. "outputs": [
  832. {
  833. "data": {
  834. "text/plain": [
  835. "['__class__',\n",
  836. " '__delattr__',\n",
  837. " '__dict__',\n",
  838. " '__dir__',\n",
  839. " '__doc__',\n",
  840. " '__eq__',\n",
  841. " '__format__',\n",
  842. " '__ge__',\n",
  843. " '__getattribute__',\n",
  844. " '__gt__',\n",
  845. " '__hash__',\n",
  846. " '__init__',\n",
  847. " '__le__',\n",
  848. " '__lt__',\n",
  849. " '__module__',\n",
  850. " '__ne__',\n",
  851. " '__new__',\n",
  852. " '__reduce__',\n",
  853. " '__reduce_ex__',\n",
  854. " '__repr__',\n",
  855. " '__setattr__',\n",
  856. " '__sizeof__',\n",
  857. " '__str__',\n",
  858. " '__subclasshook__',\n",
  859. " '__weakref__',\n",
  860. " 'salary']"
  861. ]
  862. },
  863. "execution_count": 41,
  864. "metadata": {},
  865. "output_type": "execute_result"
  866. }
  867. ],
  868. "source": [
  869. "dir(SoftwareEngineer)"
  870. ]
  871. },
  872. {
  873. "cell_type": "markdown",
  874. "metadata": {},
  875. "source": [
  876. "现在考虑另一个Artist类,告诉我们艺术家挣的钱的数量和他的艺术形式。"
  877. ]
  878. },
  879. {
  880. "cell_type": "code",
  881. "execution_count": 42,
  882. "metadata": {},
  883. "outputs": [],
  884. "source": [
  885. "class Artist:\n",
  886. " def __init__(self,name,age):\n",
  887. " self.name = name\n",
  888. " self.age = age\n",
  889. " def salary(self,value):\n",
  890. " self.money = value\n",
  891. " print(self.name,\"earns\",self.money)\n",
  892. " def artform(self, job):\n",
  893. " self.job = job\n",
  894. " print(self.name,\"is a\", self.job)"
  895. ]
  896. },
  897. {
  898. "cell_type": "code",
  899. "execution_count": 43,
  900. "metadata": {},
  901. "outputs": [],
  902. "source": [
  903. "b = Artist('Nitin',20)"
  904. ]
  905. },
  906. {
  907. "cell_type": "code",
  908. "execution_count": 44,
  909. "metadata": {},
  910. "outputs": [
  911. {
  912. "name": "stdout",
  913. "output_type": "stream",
  914. "text": [
  915. "Nitin earns 50000\n",
  916. "Nitin is a Musician\n"
  917. ]
  918. }
  919. ],
  920. "source": [
  921. "b.salary(50000)\n",
  922. "b.artform('Musician')"
  923. ]
  924. },
  925. {
  926. "cell_type": "code",
  927. "execution_count": 45,
  928. "metadata": {},
  929. "outputs": [
  930. {
  931. "data": {
  932. "text/plain": [
  933. "['__class__',\n",
  934. " '__delattr__',\n",
  935. " '__dict__',\n",
  936. " '__dir__',\n",
  937. " '__doc__',\n",
  938. " '__eq__',\n",
  939. " '__format__',\n",
  940. " '__ge__',\n",
  941. " '__getattribute__',\n",
  942. " '__gt__',\n",
  943. " '__hash__',\n",
  944. " '__init__',\n",
  945. " '__le__',\n",
  946. " '__lt__',\n",
  947. " '__module__',\n",
  948. " '__ne__',\n",
  949. " '__new__',\n",
  950. " '__reduce__',\n",
  951. " '__reduce_ex__',\n",
  952. " '__repr__',\n",
  953. " '__setattr__',\n",
  954. " '__sizeof__',\n",
  955. " '__str__',\n",
  956. " '__subclasshook__',\n",
  957. " '__weakref__',\n",
  958. " 'artform',\n",
  959. " 'money']"
  960. ]
  961. },
  962. "execution_count": 45,
  963. "metadata": {},
  964. "output_type": "execute_result"
  965. }
  966. ],
  967. "source": [
  968. "dir(Artist)"
  969. ]
  970. },
  971. {
  972. "cell_type": "markdown",
  973. "metadata": {},
  974. "source": [
  975. "money 方法和salary 方法是一样的。因此,我们可以将该方法推广到工资类,并将软件工程师类继承到美术师类。现在艺术类变成了,"
  976. ]
  977. },
  978. {
  979. "cell_type": "code",
  980. "execution_count": 6,
  981. "metadata": {},
  982. "outputs": [
  983. {
  984. "ename": "NameError",
  985. "evalue": "name 'SoftwareEngineer' is not defined",
  986. "output_type": "error",
  987. "traceback": [
  988. "\u001b[0;31m---------------------------------------------------------------------------\u001b[0m",
  989. "\u001b[0;31mNameError\u001b[0m Traceback (most recent call last)",
  990. "\u001b[0;32m<ipython-input-6-9b78404b36d6>\u001b[0m in \u001b[0;36m<module>\u001b[0;34m\u001b[0m\n\u001b[0;32m----> 1\u001b[0;31m \u001b[0;32mclass\u001b[0m \u001b[0mArtist\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mSoftwareEngineer\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m\u001b[1;32m 2\u001b[0m \u001b[0;32mdef\u001b[0m \u001b[0martform\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mself\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mjob\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 3\u001b[0m \u001b[0mself\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mjob\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0mjob\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 4\u001b[0m \u001b[0mprint\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mself\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mname\u001b[0m\u001b[0;34m,\u001b[0m\u001b[0;34m\"is a\"\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mself\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mjob\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n",
  991. "\u001b[0;31mNameError\u001b[0m: name 'SoftwareEngineer' is not defined"
  992. ]
  993. }
  994. ],
  995. "source": [
  996. "class Artist(SoftwareEngineer):\n",
  997. " def artform(self, job):\n",
  998. " self.job = job\n",
  999. " print(self.name,\"is a\", self.job)"
  1000. ]
  1001. },
  1002. {
  1003. "cell_type": "code",
  1004. "execution_count": 7,
  1005. "metadata": {},
  1006. "outputs": [
  1007. {
  1008. "ename": "NameError",
  1009. "evalue": "name 'Artist' is not defined",
  1010. "output_type": "error",
  1011. "traceback": [
  1012. "\u001b[0;31m---------------------------------------------------------------------------\u001b[0m",
  1013. "\u001b[0;31mNameError\u001b[0m Traceback (most recent call last)",
  1014. "\u001b[0;32m<ipython-input-7-1c7e054a8f0c>\u001b[0m in \u001b[0;36m<module>\u001b[0;34m\u001b[0m\n\u001b[0;32m----> 1\u001b[0;31m \u001b[0mc\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0mArtist\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;34m'Nishanth'\u001b[0m\u001b[0;34m,\u001b[0m\u001b[0;36m21\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m",
  1015. "\u001b[0;31mNameError\u001b[0m: name 'Artist' is not defined"
  1016. ]
  1017. }
  1018. ],
  1019. "source": [
  1020. "c = Artist('Nishanth',21)"
  1021. ]
  1022. },
  1023. {
  1024. "cell_type": "code",
  1025. "execution_count": 48,
  1026. "metadata": {},
  1027. "outputs": [
  1028. {
  1029. "data": {
  1030. "text/plain": [
  1031. "['__class__',\n",
  1032. " '__delattr__',\n",
  1033. " '__dict__',\n",
  1034. " '__dir__',\n",
  1035. " '__doc__',\n",
  1036. " '__eq__',\n",
  1037. " '__format__',\n",
  1038. " '__ge__',\n",
  1039. " '__getattribute__',\n",
  1040. " '__gt__',\n",
  1041. " '__hash__',\n",
  1042. " '__init__',\n",
  1043. " '__le__',\n",
  1044. " '__lt__',\n",
  1045. " '__module__',\n",
  1046. " '__ne__',\n",
  1047. " '__new__',\n",
  1048. " '__reduce__',\n",
  1049. " '__reduce_ex__',\n",
  1050. " '__repr__',\n",
  1051. " '__setattr__',\n",
  1052. " '__sizeof__',\n",
  1053. " '__str__',\n",
  1054. " '__subclasshook__',\n",
  1055. " '__weakref__',\n",
  1056. " 'artform',\n",
  1057. " 'salary']"
  1058. ]
  1059. },
  1060. "execution_count": 48,
  1061. "metadata": {},
  1062. "output_type": "execute_result"
  1063. }
  1064. ],
  1065. "source": [
  1066. "dir(Artist)"
  1067. ]
  1068. },
  1069. {
  1070. "cell_type": "code",
  1071. "execution_count": 49,
  1072. "metadata": {},
  1073. "outputs": [
  1074. {
  1075. "name": "stdout",
  1076. "output_type": "stream",
  1077. "text": [
  1078. "Nishanth earns 60000\n",
  1079. "Nishanth is a Dancer\n"
  1080. ]
  1081. }
  1082. ],
  1083. "source": [
  1084. "c.salary(60000)\n",
  1085. "c.artform('Dancer')"
  1086. ]
  1087. },
  1088. {
  1089. "cell_type": "markdown",
  1090. "metadata": {},
  1091. "source": [
  1092. "假设在继承一个特定方法的时候,该方法不适合新类。可以通过在新类中用相同的名称再次定义该方法来重写该方法。"
  1093. ]
  1094. },
  1095. {
  1096. "cell_type": "code",
  1097. "execution_count": 50,
  1098. "metadata": {},
  1099. "outputs": [],
  1100. "source": [
  1101. "class Artist(SoftwareEngineer):\n",
  1102. " def artform(self, job):\n",
  1103. " self.job = job\n",
  1104. " print(self.name,\"is a\", self.job)\n",
  1105. " def salary(self, value):\n",
  1106. " self.money = value\n",
  1107. " print(self.name,\"earns\",self.money)\n",
  1108. " print(\"I am overriding the SoftwareEngineer class's salary method\")"
  1109. ]
  1110. },
  1111. {
  1112. "cell_type": "code",
  1113. "execution_count": 51,
  1114. "metadata": {},
  1115. "outputs": [],
  1116. "source": [
  1117. "c = Artist('Nishanth',21)"
  1118. ]
  1119. },
  1120. {
  1121. "cell_type": "code",
  1122. "execution_count": 52,
  1123. "metadata": {},
  1124. "outputs": [
  1125. {
  1126. "name": "stdout",
  1127. "output_type": "stream",
  1128. "text": [
  1129. "Nishanth earns 60000\n",
  1130. "I am overriding the SoftwareEngineer class's salary method\n",
  1131. "Nishanth is a Dancer\n"
  1132. ]
  1133. }
  1134. ],
  1135. "source": [
  1136. "c.salary(60000)\n",
  1137. "c.artform('Dancer')"
  1138. ]
  1139. },
  1140. {
  1141. "cell_type": "markdown",
  1142. "metadata": {},
  1143. "source": [
  1144. "如果不确定方法将被调用多少次,那么就很难声明那么多变量来携带每个结果,因此最好声明一个列表并附加结果。"
  1145. ]
  1146. },
  1147. {
  1148. "cell_type": "code",
  1149. "execution_count": 56,
  1150. "metadata": {},
  1151. "outputs": [],
  1152. "source": [
  1153. "class emptylist:\n",
  1154. " def __init__(self):\n",
  1155. " self.data = []\n",
  1156. " def one(self,x):\n",
  1157. " self.data.append(x)\n",
  1158. " def two(self, x ):\n",
  1159. " self.data.append(x**2)\n",
  1160. " def three(self, x):\n",
  1161. " self.data.append(x**3)"
  1162. ]
  1163. },
  1164. {
  1165. "cell_type": "code",
  1166. "execution_count": 57,
  1167. "metadata": {},
  1168. "outputs": [],
  1169. "source": [
  1170. "xc = emptylist()"
  1171. ]
  1172. },
  1173. {
  1174. "cell_type": "code",
  1175. "execution_count": 59,
  1176. "metadata": {},
  1177. "outputs": [
  1178. {
  1179. "name": "stdout",
  1180. "output_type": "stream",
  1181. "text": [
  1182. "[1]\n"
  1183. ]
  1184. }
  1185. ],
  1186. "source": [
  1187. "xc.one(1)\n",
  1188. "print(xc.data)"
  1189. ]
  1190. },
  1191. {
  1192. "cell_type": "markdown",
  1193. "metadata": {},
  1194. "source": [
  1195. "因为xc.data是一个列表,直接的列表操作也是可以进行的。"
  1196. ]
  1197. },
  1198. {
  1199. "cell_type": "code",
  1200. "execution_count": 60,
  1201. "metadata": {},
  1202. "outputs": [
  1203. {
  1204. "name": "stdout",
  1205. "output_type": "stream",
  1206. "text": [
  1207. "[1, 8]\n"
  1208. ]
  1209. }
  1210. ],
  1211. "source": [
  1212. "xc.data.append(8)\n",
  1213. "print(xc.data)"
  1214. ]
  1215. },
  1216. {
  1217. "cell_type": "code",
  1218. "execution_count": 61,
  1219. "metadata": {},
  1220. "outputs": [
  1221. {
  1222. "name": "stdout",
  1223. "output_type": "stream",
  1224. "text": [
  1225. "[1, 8, 9]\n"
  1226. ]
  1227. }
  1228. ],
  1229. "source": [
  1230. "xc.two(3)\n",
  1231. "print(xc.data)"
  1232. ]
  1233. },
  1234. {
  1235. "cell_type": "markdown",
  1236. "metadata": {},
  1237. "source": [
  1238. "如果输入参数的数量因实例而异,则可以使用星号。"
  1239. ]
  1240. },
  1241. {
  1242. "cell_type": "code",
  1243. "execution_count": 62,
  1244. "metadata": {},
  1245. "outputs": [],
  1246. "source": [
  1247. "class NotSure:\n",
  1248. " def __init__(self, *args):\n",
  1249. " self.data = ''.join(list(args)) "
  1250. ]
  1251. },
  1252. {
  1253. "cell_type": "code",
  1254. "execution_count": 63,
  1255. "metadata": {},
  1256. "outputs": [],
  1257. "source": [
  1258. "yz = NotSure('I', 'Do' , 'Not', 'Know', 'What', 'To','Type')"
  1259. ]
  1260. },
  1261. {
  1262. "cell_type": "code",
  1263. "execution_count": 64,
  1264. "metadata": {},
  1265. "outputs": [
  1266. {
  1267. "data": {
  1268. "text/plain": [
  1269. "'IDoNotKnowWhatToType'"
  1270. ]
  1271. },
  1272. "execution_count": 64,
  1273. "metadata": {},
  1274. "output_type": "execute_result"
  1275. }
  1276. ],
  1277. "source": [
  1278. "yz.data"
  1279. ]
  1280. },
  1281. {
  1282. "cell_type": "markdown",
  1283. "metadata": {},
  1284. "source": [
  1285. "# 3. 接下来应该怎么做"
  1286. ]
  1287. },
  1288. {
  1289. "cell_type": "markdown",
  1290. "metadata": {},
  1291. "source": [
  1292. "单独练习可以帮助你掌握python的窍门。给自己一个问题陈述并解决它们。您还可以在任何竞争的编码平台上提交问题求解。你编写的代码越多,你发现的越多,你就越开始欣赏这门语言。\n",
  1293. "\n",
  1294. "现在已经向您介绍了python,您可以尝试您感兴趣的领域中的不同python库。我强烈建议您查看这个Python框架、库和软件列表http://awesome-python.com\n",
  1295. "\n",
  1296. "\n",
  1297. "python官方文档: https://docs.python.org/3/\n",
  1298. "\n",
  1299. "Pyton 教程:\n",
  1300. "* [Python tutorial (廖雪峰)](https://www.liaoxuefeng.com/wiki/1016959663602400)\n",
  1301. "* [Python基础教程](https://www.runoob.com/python/python-tutorial.html)\n",
  1302. "* [Python官方教程(中文版)](https://docs.python.org/zh-cn/3/tutorial/index.html)\n",
  1303. "\n",
  1304. "你也可以参考一些Python的练习程序,是由 Kartik Kannapur所写的。 Github Repo : https://github.com/rajathkumarmp/Python-Lectures \n",
  1305. "\n",
  1306. "\n",
  1307. "享受解决问题陈述,因为生命短暂,你需要python!"
  1308. ]
  1309. },
  1310. {
  1311. "cell_type": "code",
  1312. "execution_count": null,
  1313. "metadata": {},
  1314. "outputs": [],
  1315. "source": []
  1316. }
  1317. ],
  1318. "metadata": {
  1319. "kernelspec": {
  1320. "display_name": "Python 3",
  1321. "language": "python",
  1322. "name": "python3"
  1323. },
  1324. "language_info": {
  1325. "codemirror_mode": {
  1326. "name": "ipython",
  1327. "version": 3
  1328. },
  1329. "file_extension": ".py",
  1330. "mimetype": "text/x-python",
  1331. "name": "python",
  1332. "nbconvert_exporter": "python",
  1333. "pygments_lexer": "ipython3",
  1334. "version": "3.6.8"
  1335. }
  1336. },
  1337. "nbformat": 4,
  1338. "nbformat_minor": 1
  1339. }

机器学习越来越多应用到飞行器、机器人等领域,其目的是利用计算机实现类似人类的智能,从而实现装备的智能化与无人化。本课程旨在引导学生掌握机器学习的基本知识、典型方法与技术,通过具体的应用案例激发学生对该学科的兴趣,鼓励学生能够从人工智能的角度来分析、解决飞行器、机器人所面临的问题和挑战。本课程主要内容包括Python编程基础,机器学习模型,无监督学习、监督学习、深度学习基础知识与实现,并学习如何利用机器学习解决实际问题,从而全面提升自我的《综合能力》。