亚洲激情专区-91九色丨porny丨老师-久久久久久久女国产乱让韩-国产精品午夜小视频观看

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

類和對象怎么在python中使用

發布時間:2021-03-31 17:08:02 來源:億速云 閱讀:165 作者:Leah 欄目:開發技術

這篇文章給大家介紹類和對象怎么在python中使用,內容非常詳細,感興趣的小伙伴們可以參考借鑒,希望對大家能有所幫助。

類的定義

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

空類

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

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

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

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

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

__init__函數

在上面的例子中,我們沒有寫任何東西,但是還是會有一個默認的構造函數。在python中也有類似構造函數的東西,就是__init__函數。在創建對象的時候會自動調用這個函數。

#!/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

當新建一個person對象時,因為__init__中需要有name參數,所以需要提供一個參數。可以看到這個類中有一個自己的域,在構造的時候把name的值賦給對象里的name。
可以看到,sayHi并不需要參數,但是在定義函數時仍然要有參數self

__del__函數

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

使用類的變量

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

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

這樣就有一個慣例,如果某個變量只想在類或對象中使用,就應該以單下劃線前綴。而其他的名稱都將作為公共的,可以被其他類/對象使用。

#!/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賦值)因此是對象的變量。

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

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

當一個對象被清除的時候,del被調用,人數減少1并輸出誰走了。一開始Abdul Kalam被自動清除了,后來Swaroop也被自動清除了。清除的順序應該跟對象閑置的時間有關,當閑置時間達到某個值就清除掉。

繼承

python的繼承和C++還有JAVA沒有什么不同,就是構造函數和其他函數里記得要在參數里加上self。函數的重載也是和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是父類,學生和老師是子類,繼承的方法為在類定義中把參數設為schoolmenber。可以看到,當我們繼承一個類的時候,首先調用的是父類的構造函數,然后才是子類的。

關于類和對象怎么在python中使用就分享到這里了,希望以上內容可以對大家有一定的幫助,可以學到更多知識。如果覺得文章不錯,可以把它分享出去讓更多的人看到。

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

东辽县| 会东县| 濮阳县| 怀来县| 阿巴嘎旗| 讷河市| 顺平县| 达尔| 广东省| 桐乡市| 镇原县| 张家港市| 拜城县| 密山市| 黎川县| 定西市| 邢台市| 伊春市| 逊克县| 大丰市| 芜湖县| 邹平县| 永安市| 霸州市| 安西县| 梁平县| 祁门县| 和硕县| 隆安县| 明水县| 弥渡县| 来安县| 景泰县| 永昌县| 禹州市| 革吉县| 寿阳县| 济宁市| 天峻县| 安平县| 双辽市|