# 建立類 class Foo: # 這裏咱們能夠建立一個類級別的變量 # 它不會隨着由此類建立的變量而變化 name = 'Jan' def bar(self): print('Bar') def hello(self, name): print('you are %s' %self.name) print('I am %s' %name) print('\n') # 根據Foo建立的對象 obj1 = Foo() obj2 = Foo() obj1.hello('August') obj2.hello('July')
輸出結果:python
you are Jan I am August you are Jan I am July
因爲Python是動態語言,根據類建立的實例能夠任意綁定屬性。
給實例綁定屬性的方法是經過實例變量,或者經過self變量:app
2.1 實例屬性函數
class Student(object): def __init__(self, name): self.name = name s = Student('Bob') s.score = 90
score是實例屬性spa
實例屬性優先級高於類屬性命令行
# -*-coding:utf-8 —*— class Student(object): name = 'Student' s = Student() # 建立實例s print(s.name) # 打印name屬性,由於實例並無name屬性,因此會繼續查找class的name>屬性 s.name = 'Michael' # 給實例綁定name屬性 print(s.name) # 因爲實例屬性優先級比類屬性高,所以,它會屏蔽掉類的name屬性 print(Student.name)
輸出結果爲:code
Student Michael Student
模塊:在python中一個文件能夠被當作1個獨立模塊,模塊把python代碼分紅一些有組織的代碼段,經過導入的方式實現代碼重用。orm
包:對應着文件夾,包必須至少含有一個__int__.py文件按,該文件的內容能夠爲空。int.py用於標識當前文件夾是一個包。對象
app/ __init__.py a/ __init__.py a.py b/ __init__.py b.py
app是最頂層的包,a和b是它的子包,能夠這樣導入:ip
from app.a import a from app.b.b import test a.test() test()
reload() 函數語法:
reload(module)
utf-8
開啓一個交互對話,建立一個以下文件script.py:
#-*-coding:utf-8 -*- import sys print sys.platform print 2**100 x='spam' print x*8
在命令行中運行,結果以下:
>>> import scripy darwin 1267650600228229401496703205376 spamspamspamspamspamspamspamspam >>> import scripy >>>
也即每次交互,只有第一次導入有效,由於,默認狀況下,只有在每次會話的第一次運行,第一次導入以後,其餘的導入都不會再工做,甚至對模塊內容的修改也仍然不會工做。只有推出交互後從新創建一次交互再導入才能夠(這多麻煩呀)
由於導入是開銷很大的操做,
爲解決導入問題,要在同一次會話中屢次運行文件,需引入reload()
>>> import scripy darwin 1267650600228229401496703205376 spamspamspamspamspamspamspamspam >>> reload(scripy) darwin 1267650600228229401496703205376 spamspamspamspamspamspamspamspam <module 'scripy' from 'scripy.pyc'> >>>