最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

python編程進階之類和對象用法實例分析

 更新時間:2020年02月21日 12:23:47   作者:Nicoder  
這篇文章主要介紹了python編程進階之類和對象用法,結(jié)合實例形式分析了python類和對象概念、原理、內(nèi)置函數(shù)、類的變量、繼承等相關(guān)使用技巧與注意事項,需要的朋友可以參考下

本文實例講述了python類和對象用法。分享給大家供大家參考,具體如下:

前面我們都是用python面向過程編程,現(xiàn)在來用python創(chuàng)建類和對象,面向?qū)ο缶幊?。類和對象是面向?qū)ο缶幊痰膬蓚€主要方面。類創(chuàng)建一個新類型,而對象這個類的 實例 。這類似于你有一個int類型的變量,這存儲整數(shù)的變量是int類的實例(對象)。在python中,類和實例中的變量稱為域,類和實例中的函數(shù)稱為方法,域和方法都是類和實例的屬性。

類的定義

在定義類或者它的函數(shù)的時候,如果沒有參數(shù)的話,需要把參數(shù)寫為self,這樣在外部調(diào)用的時候能清楚調(diào)用的是哪個實例的函數(shù)。這個self表示的是當(dāng)前的實例,與C++中的self和Java中的this是一樣的。

空類

#!/usr/bin/python
# Filename: simplestclass.py
class Person:
  pass # An empty block
p = Person()
print p

我們使用class語句后跟類名,創(chuàng)建了一個新的類。這后面跟著一個縮進的語句塊形成類體。在這個例子中,我們使用了一個空白塊,它由pass語句表示。這樣編譯的時候就會跳過。這是一個空類。

接下來,我們使用類名后跟一對圓括號來創(chuàng)建一個對象/實例。因為這個類不需要任何的參數(shù),所以創(chuàng)建的時候也不需要參數(shù)。

$ python simplestclass.py
<__main__.Person instance at 0xf6fcb18c>

打印這個對象,我們可以看到這個對象所屬的類,以及它的內(nèi)存地址。

__init__函數(shù)

在上面的例子中,我們沒有寫任何東西,但是還是會有一個默認的構(gòu)造函數(shù)。在python中也有類似構(gòu)造函數(shù)的東西,就是__init__函數(shù)。在創(chuàng)建對象的時候會自動調(diào)用這個函數(shù)。

#!/usr/bin/python
# Filename: class_init.py
class Person:
  def __init__(self, name):
    self.name = name
  def sayHi(self):
    print 'Hello, my name is', self.name
p = Person('Swaroop')
p.sayHi()

輸出:

$ python class_init.py
Hello, my name is Swaroop

當(dāng)新建一個person對象時,因為__init__中需要有name參數(shù),所以需要提供一個參數(shù)??梢钥吹竭@個類中有一個自己的域,在構(gòu)造的時候把name的值賦給對象里的name。
可以看到,sayHi并不需要參數(shù),但是在定義函數(shù)時仍然要有參數(shù)self。

__del__函數(shù)

就如同init方法一樣,還有一個特殊的方法del,它在對象消逝的時候被調(diào)用。相當(dāng)于析構(gòu)函數(shù)。對象消逝即對象不再被使用,它所占用的內(nèi)存將返回給系統(tǒng)作它用。但是很難保證這個方法究竟在什么時候運行。如果你想要指明它的運行,你就得使用del語句。代碼例子和下面的在一起。

使用類的變量

Python中所有的類成員(包括數(shù)據(jù)成員)都是公共的,所有的方法都是有效的 。

只有一個例外:如果你使用的數(shù)據(jù)成員名稱以雙下劃線前綴比如__privatevar,Python的名稱管理體系會有效地把它作為私有變量。

這樣就有一個慣例,如果某個變量只想在類或?qū)ο笾惺褂?,就?yīng)該以單下劃線前綴。而其他的名稱都將作為公共的,可以被其他類/對象使用。

#!/usr/bin/python
# Filename: objvar.py
class Person:
  '''Represents a person.'''
  population = 0
  def __init__(self, name):
    '''Initializes the person's data.'''
    self.name = name
    print '(Initializing %s)' % self.name
    # When this person is created, he/she
    # adds to the population
    Person.population += 1
  def __del__(self):
    '''I am dying.'''
    print '%s says bye.' % self.name
    Person.population -= 1
    if Person.population == 0:
      print 'I am the last one.'
    else:
      print 'There are still %d people left.' % Person.population
  def sayHi(self):
    '''Greeting by the person.
    Really, that's all it does.'''
    print 'Hi, my name is %s.' % self.name
  def howMany(self):
    '''Prints the current population.'''
    if Person.population == 1:
      print 'There is nobody here.'
    else:
      print 'We have %d persons here.' % Person.population
swaroop = Person('Swaroop')
swaroop.sayHi()
swaroop.howMany()
kalam = Person('Abdul Kalam')
kalam.sayHi()
kalam.howMany()
swaroop.sayHi()
swaroop.howMany()

輸出:

$ python objvar.py
(Initializing Swaroop)
Hi, my name is Swaroop.
I am the only person here.
(Initializing Abdul Kalam)
Hi, my name is Abdul Kalam.
We have 2 persons here.
Hi, my name is Swaroop.
We have 2 persons here.
Abdul Kalam says bye.
There are still 1 people left.
Swaroop says bye.
There is nobody here.

這是一個很長的例子。這里,population屬于Person類,因此是一個類的變量。name變量屬于對象(它使用self賦值)因此是對象的變量。

觀察可以發(fā)現(xiàn)init方法用一個名字來初始化Person實例。在這個方法中,我們讓population增加1,這是因為我們增加了一個人。同樣可以發(fā)現(xiàn),self.name的值根據(jù)每個對象指定,這表明了它作為對象的變量的本質(zhì)。

記住,你只能使用self變量來引用同一個對象的變量和方法。這被稱為 屬性引用。

當(dāng)一個對象被清除的時候,del被調(diào)用,人數(shù)減少1并輸出誰走了。一開始Abdul Kalam被自動清除了,后來Swaroop也被自動清除了。清除的順序應(yīng)該跟對象閑置的時間有關(guān),當(dāng)閑置時間達到某個值就清除掉。

繼承

python的繼承和C++還有JAVA沒有什么不同,就是構(gòu)造函數(shù)和其他函數(shù)里記得要在參數(shù)里加上self。函數(shù)的重載也是和C++,JAVA一樣的。

例子:

#!/usr/bin/python
# Filename: inherit.py
class SchoolMember:
  '''Represents any school member.'''
  def __init__(self, name, age):
    self.name = name
    self.age = age
    print '(Initialized SchoolMember: %s)' % self.name
  def tell(self):
    '''Tell my details.'''
    print 'Name:"%s" Age:"%s"' % (self.name, self.age),
class Teacher(SchoolMember):
  '''Represents a teacher.'''
  def __init__(self, name, age, salary):
    SchoolMember.__init__(self, name, age)
    self.salary = salary
    print '(Initialized Teacher: %s)' % self.name
  def tell(self):
    SchoolMember.tell(self)
    print 'Salary: "%d"' % self.salary
class Student(SchoolMember):
  '''Represents a student.'''
  def __init__(self, name, age, marks):
    SchoolMember.__init__(self, name, age)
    self.marks = marks
    print '(Initialized Student: %s)' % self.name
  def tell(self):
    SchoolMember.tell(self)
    print 'Marks: "%d"' % self.marks
t = Teacher('Mrs. Shrividya', 40, 30000)
s = Student('Swaroop', 22, 75)
print # prints a blank line
members = [t, s]
for member in members:
  member.tell() # works for both Teachers and Students

輸出:

$ python inherit.py
(Initialized SchoolMember: Mrs. Shrividya)
(Initialized Teacher: Mrs. Shrividya)
(Initialized SchoolMember: Swaroop)
(Initialized Student: Swaroop)

Name:"Mrs. Shrividya" Age:"40" Salary: "30000"
Name:"Swaroop" Age:"22" Marks: "75"

schoolmenber是父類,學(xué)生和老師是子類,繼承的方法為在類定義中把參數(shù)設(shè)為schoolmenber??梢钥吹?,當(dāng)我們繼承一個類的時候,首先調(diào)用的是父類的構(gòu)造函數(shù),然后才是子類的。

更多關(guān)于Python相關(guān)內(nèi)容感興趣的讀者可查看本站專題:《Python面向?qū)ο蟪绦蛟O(shè)計入門與進階教程》、《Python數(shù)據(jù)結(jié)構(gòu)與算法教程》、《Python函數(shù)使用技巧總結(jié)》、《Python字符串操作技巧匯總》、《Python編碼操作技巧總結(jié)》及《Python入門與進階經(jīng)典教程

希望本文所述對大家Python程序設(shè)計有所幫助。

相關(guān)文章

  • python基于Tkinter實現(xiàn)人員管理系統(tǒng)

    python基于Tkinter實現(xiàn)人員管理系統(tǒng)

    這篇文章主要為大家詳細介紹了python基于Tkinter實現(xiàn)人員管理系統(tǒng),文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2021-11-11
  • Python從零打造高安全密碼管理器

    Python從零打造高安全密碼管理器

    在數(shù)字化時代,每人平均需要管理近百個賬號密碼,本文將帶大家深入剖析一個基于Python的高安全性密碼管理器實現(xiàn)方案,感興趣的小伙伴可以參考一下
    2025-04-04
  • numpy求解線性代數(shù)相關(guān)問題

    numpy求解線性代數(shù)相關(guān)問題

    本文主要介紹了numpy求解線性代數(shù)相關(guān)問題,文中通過示例代碼介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2025-01-01
  • pygame實現(xiàn)成語填空游戲

    pygame實現(xiàn)成語填空游戲

    這篇文章主要介紹了pygame實現(xiàn)成語填空游戲,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2019-10-10
  • Python3多目標(biāo)賦值及共享引用注意事項

    Python3多目標(biāo)賦值及共享引用注意事項

    這篇文章主要介紹了Python3多目標(biāo)賦值及共享引用注意事項,本文通過實例代碼給大家介紹的非常詳細,具有一定的參考借鑒價值,需要的朋友可以參考下
    2019-05-05
  • python TK庫簡單應(yīng)用(實時顯示子進程輸出)

    python TK庫簡單應(yīng)用(實時顯示子進程輸出)

    這篇文章主要介紹了python TK庫簡單應(yīng)用(實時顯示子進程輸出),文中通過示例代碼介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2019-10-10
  • 使用Python實現(xiàn)文件重命名的三種方法

    使用Python實現(xiàn)文件重命名的三種方法

    在處理數(shù)據(jù)集中,我們經(jīng)常需要對文件進行重命名操作,這篇文章小編為大家總結(jié)了幾種文件重命名的方法,可以大家一鍵重命名,有需要的可以了解下
    2025-02-02
  • python2和python3在處理字符串上的區(qū)別詳解

    python2和python3在處理字符串上的區(qū)別詳解

    這篇文章主要介紹了python2和python3在處理字符串上的區(qū)別詳解,文中通過示例代碼介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2019-05-05
  • 利用Python編寫一個記憶翻牌游戲

    利用Python編寫一個記憶翻牌游戲

    本文帶大家寫個小游戲,不過老是用pygame也沒啥意思,這次我們換點新花樣,用python自帶的tkinter包寫一個記憶翻牌小游戲,感興趣的可以了解一下
    2022-03-03
  • Python 使用xlwt模塊將多行多列數(shù)據(jù)循環(huán)寫入excel文檔的操作

    Python 使用xlwt模塊將多行多列數(shù)據(jù)循環(huán)寫入excel文檔的操作

    這篇文章主要介紹了Python 使用xlwt模塊將多行多列數(shù)據(jù)循環(huán)寫入excel文檔的操作,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2020-11-11

最新評論

樟树市| 凤凰县| 临桂县| 马公市| 海伦市| 正定县| 确山县| 嘉善县| 武定县| 子长县| 泽库县| 玉溪市| 和林格尔县| 柘城县| 兴业县| 阆中市| 平南县| 涟水县| 怀安县| 离岛区| 永城市| 广安市| 青河县| 新田县| 芮城县| 京山县| 新竹市| 松潘县| 乌拉特后旗| 渭南市| 西藏| 青阳县| 宜昌市| 灵武市| 镇远县| 平陆县| 荥阳市| 密云县| 襄垣县| 武清区| 桓仁|