1. 模塊
2. 類(lèi)和對(duì)象
3. 類(lèi)的繼承
目錄【Python程序員都知道的入門(mén)知識(shí)】

1. 模塊
一個(gè).py文件相當(dāng)于一個(gè)模塊(module).
導(dǎo)入模塊語(yǔ)法:
import 模塊名
from 模塊名 import 函數(shù)名1,函數(shù)名2.。。。
from 模塊名 import *
from module1 import add
add(1 , 2) # 調(diào)用時(shí)不需要加模塊名稱:module1.
==================================
import module1
module1.add(1,2) # 這種導(dǎo)入模塊的方式需要在方法前加模塊名稱:module1.
==================================
from module1 import *
add(1,2)
==================================
from module1 import add
from module2 import add # 會(huì)覆蓋module1的add方法
add(1 , 2) # 此時(shí)調(diào)用的是module2中的add方法
用 dir(模塊名) 查看該模塊中的所有子模塊、變量或函數(shù)。
用 global() 查看所有的全局變量
用 local() 查看所有的局部變量
用 reload(模塊名) 重新導(dǎo)入先前導(dǎo)入過(guò)的模塊
那么問(wèn)題來(lái)了,如何生成包?
# Student.py ==============
score()
# Lesson.py ===============
lesson()
# Class.py ================
from Lessonimport lesson
from Student import score
# user ====================
import Class# 導(dǎo)入Class包
Class.score()
Class.lesson()
Python有哪些內(nèi)置的標(biāo)準(zhǔn)庫(kù)呢?
詳情請(qǐng)移步官方說(shuō)明:The Python Standard Library
這里簡(jiǎn)要記錄下有哪些常用到的內(nèi)置模塊:
sys #:與系統(tǒng)相關(guān)的模塊
os #:與操作系統(tǒng)相關(guān)的模塊
re #:正則表達(dá)式模塊
json #:用于處理JSON字符串的功能模塊
urllib,urllib2 #:用在網(wǎng)絡(luò)請(qǐng)求的功能模塊
想在開(kāi)發(fā)過(guò)程中輕松翻標(biāo)準(zhǔn)庫(kù)的源碼?
PyCharm 也許是個(gè)不錯(cuò)的選擇 , 打好一場(chǎng)仗,裝備很重要。
鼠標(biāo)指向你要查看的模塊,比如 os ,然后ctrl + 鼠標(biāo)左鍵,就鏈接到下圖中了:

此外在新建項(xiàng)目的時(shí)候,你可以直接選擇創(chuàng)建一個(gè)Flask框架的Python項(xiàng)目,或者選擇創(chuàng)建其他框架的Python項(xiàng)目,比如下圖中展示的Django、Pyramid等等?!咀⒁庖惭bProfession版的哦!】

2. 類(lèi)和對(duì)象
2.1. 格式
class ClassName:
"Doc" #:類(lèi)的說(shuō)明文檔
class_suite #:類(lèi)的主體內(nèi)容
<a>注意</a> 類(lèi)中的函數(shù)中要添加self 作為第一個(gè)參數(shù),實(shí)際調(diào)用時(shí)不需要傳這個(gè)參數(shù)。普通的非類(lèi)中函數(shù)就不用。
2.2. 內(nèi)置類(lèi)屬性
ClassName.__doc__ 查看類(lèi)的說(shuō)明文檔(前后都是兩個(gè)下劃線 _)
ClassName.__module__ 查看類(lèi)所在的模塊
ClassName.__dict__ 查看類(lèi)所有的屬性
ClassName.__bases__ 查看類(lèi)所有的父類(lèi)
ClassNmae.__name__ 查看類(lèi)的名字
話不多說(shuō),先上代碼:


上一張圖中顯示了兩個(gè)不同執(zhí)行方式的差別,
import School 上方是直接運(yùn)行School.py文件,而下方則是通過(guò) import到入模塊的方式加載School模塊,當(dāng)自身就是運(yùn)行體的時(shí)候,.__module__獲取到的是: __main__ ;而作為模塊導(dǎo)入的時(shí)候,得到的就是實(shí)實(shí)在在的模塊名稱 :School
那么問(wèn)題來(lái)了,假設(shè)我在類(lèi)中定義一個(gè)全局變量 objectCount = 0,并且在初始化init()方法中寫(xiě)入 Student.objectCount + = 1會(huì)有什么影響?
請(qǐng)看下圖:

可以看出,每一個(gè)實(shí)例出來(lái)的對(duì)象都對(duì)
Student 這個(gè)類(lèi)的全局變量 objectCount 產(chǎn)生了影響。這一點(diǎn)與Java 就有所不同。這樣看來(lái)我們可以輕易地統(tǒng)計(jì)到一個(gè)類(lèi)的實(shí)例對(duì)象了。
2.3. 屬性
__private_attr :屬性名稱由兩個(gè)下劃線開(kāi)頭的為私有屬性
__private_method :函數(shù)名稱由兩個(gè)下劃線開(kāi)頭的為私有函數(shù)
del objName.attrName 刪除屬性
hasattr(obj , name) 是否存在該屬性
setattr(obj , name) 設(shè)置屬性
getattr(obj , name) 獲取屬性值
delattr(obj , name) 刪除屬性
3. 類(lèi)的繼承
3.1. 格式
class SubClassName (ParentClassName 1,ParentClassName2,......):
"doc"
class_suite
3.2. 特性
- 與Java不同,Python中除非在子類(lèi)中有調(diào)用,否則不會(huì)自動(dòng)調(diào)用父類(lèi)的初始化方法
__init__. - 子類(lèi)中調(diào)用父類(lèi)方法,加父類(lèi)類(lèi)名前綴,然后參數(shù)要加入
self,如:ParentName.parMethod(self) - 在外部調(diào)用方法時(shí),會(huì)先從子類(lèi)中找方法,找不到才去父類(lèi)中找
issubclass(sub ,parent) :判斷是否是誰(shuí)的子類(lèi)
isinstance(obj , class) :判斷是否是某個(gè)類(lèi)的對(duì)象
3.3. 自帶的重載方法
__init__(self , arg,...) 初始化方法
__del__(self) 刪除對(duì)象
__cmp__(self,obj) 對(duì)象比較
__str__(self) 轉(zhuǎn)化成適于人閱讀的形式
__repr__(self) 轉(zhuǎn)化成機(jī)器閱讀形式