python類

python類

  1. 類級別的變量
# 建立類
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
  • self是個代指。代指了本身所在的class。你能夠由 self 點進所指class自己的函數。因而可知,self 自己做爲一個代詞,並不必定要叫self。你也能夠用個其餘什麼來代替。只不過,必須得是這個類的全部子方法的第一個參數:
  • self.name指類中的Jan

類屬性和實例屬性

因爲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
  • 從上面的例子能夠看出,在編寫程序的時候,千萬不要把實例屬性和類屬性使用相同的名字,由於相同名稱的實例屬性將屏蔽掉類屬性,可是當你刪除實例屬性後,再使用相同的名稱,訪問到的將是類屬性。

構造函數__init__()的參數

模塊和包

模塊:在python中一個文件能夠被當作1個獨立模塊,模塊把python代碼分紅一些有組織的代碼段,經過導入的方式實現代碼重用。orm

包:對應着文件夾,包必須至少含有一個__int__.py文件按,該文件的內容能夠爲空。int.py用於標識當前文件夾是一個包。對象

  • 包將有聯繫的模塊組織在一塊兒,有效避免模塊名稱衝突問題,讓應用組織結構更加清晰。 一個普通的python應用程序目錄結構:
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() 函數語法:reload(module)utf-8

  • 爲了防止被import的模塊修改以後因之一次導入而使得修改不起做用而存在

開啓一個交互對話,建立一個以下文件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'>
>>>
相關文章
相關標籤/搜索