天天看點

python的類變量和執行個體變量_python進階——Python類和執行個體變量

【摘要】在介紹域後,我們就要告訴你一些Python的類和執行個體變量。類和執行個體變量有一些巧妙的技巧,你需要知道類對象與類定義文法如何工作才能完全了解正在發生的事情。順便說一下,關于這個主題的知識對任何進階Python程式員都很有用。

一般來說,執行個體變量用于每個執行個體的唯一資料,而類變量用于類的所有執行個體共享的屬性和方法:

class Dog:

kind = 'canine' # class variable shared by all instances

def __init__(self, name):

self.name = name # instance variable unique to each instance

>>> d = Dog('Fido')

>>> e = Dog('Buddy')

>>> d.kind # shared by all dogs

'canine'

>>> e.kind # shared by all dogs

'canine'

>>> d.name # unique to d

'Fido'

>>> e.name # unique to e

'Buddy'

正如 名稱和對象 中已讨論過的,共享資料可能在涉及 mutable 對象例如清單和字典的時候導緻令人驚訝的結果。 例如以下代碼中的 tricks 清單不應該被用作類變量,因為所有的 Dog 執行個體将隻共享一個單獨的清單:

class Dog:

tricks = [] # mistaken use of a class variable

def __init__(self, name):

self.name = name

def add_trick(self, trick):

self.tricks.append(trick)

>>> d = Dog('Fido')

>>> e = Dog('Buddy')

>>> d.add_trick('roll over')

>>> e.add_trick('play dead')

>>> d.tricks # unexpectedly shared by all dogs

['roll over', 'play dead']

正确的類設計應該使用執行個體變量:

class Dog:

def __init__(self, name):

self.name = name

self.tricks = [] # creates a new empty list for each dog

def add_trick(self, trick):

self.tricks.append(trick)

>>> d = Dog('Fido')

>>> e = Dog('Buddy')

>>> d.add_trick('roll over')

>>> e.add_trick('play dead')

>>> d.tricks

['roll over']

>>> e.tricks

['play dead']

以上就是我們整理的Python類和執行個體變量,這些代碼和理論都可以或多或少的幫助我們了解Python類和執行個體變量,如果您在練習python的時候又遇到了困難,可以試着回來看看,也許會給你意想不到的結果,環球網校小編在這裡祝大家的python學習之路順利。