1. 程式人生 > 程式設計 >Python 類的魔法屬性用法例項分析

Python 類的魔法屬性用法例項分析

本文例項講述了Python 類的魔法屬性用法。分享給大家供大家參考,具體如下:

魔法屬性

無論人或事物往往都有不按套路出牌的情況,Python的類屬性也是如此,存在著一些具有特殊含義的屬性,詳情如下:

1. doc

表示類的描述資訊

class Foo:
  """ 描述類資訊,這是用於看片的神奇 """
  def func(self):
    pass
print(Foo.__doc__)
#輸出:類的描述資訊

2. module 和 class

module 表示當前操作的物件在那個模組
class 表示當前操作的物件的類是什麼

test.py

# -*- coding:utf-8 -*-

class Person(object):
  def __init__(self):
    self.name = 'laowang'

main.py

from test import Person
obj = Person()
print(obj.__module__) # 輸出 test 即:輸出模組
print(obj.__class__) # 輸出 test.Person 即:輸出類

3. init

初始化方法,通過類建立物件時,自動觸發執行

class Person:
  def __init__(self,name):
    self.name = name
    self.age = 18
obj = Person('laowang') # 自動執行類中的 __init__ 方法

4. del

當物件在記憶體中被釋放時,自動觸發執行。

注:此方法一般無須定義,因為Python是一門高階語言,程式設計師在使用時無需關心記憶體的分配和釋放,因為此工作都是交給Python直譯器來執行,所以,__del__的呼叫是由直譯器在進行垃圾回收時自動觸發執行的。

class Foo:
  def __del__(self):
    pass

5. call

物件後面加括號,觸發執行。

注:__init__方法的執行是由建立物件觸發的,即:物件 = 類名() ;而對於 call 方法的執行是由物件後加括號觸發的,即:物件() 或者 類()()

class Foo:
  def __init__(self):
    pass
  def __call__(self,*args,**kwargs):
    print('__call__')
obj = Foo() # 執行 __init__
obj() # 執行 __call__

6. dict

類或物件中的所有屬性

類的例項屬性屬於物件;類中的類屬性和方法等屬於類,即:

class Province(object):
  country = 'China'
  def __init__(self,name,count):
    self.name = name
    self.count = count
  def func(self,**kwargs):
    print('func')
# 獲取類的屬性,即:類屬性、方法、
print(Province.__dict__)
# 輸出:{'__dict__': <attribute '__dict__' of 'Province' objects>,'__module__': '__main__','country': 'China','__doc__': None,'__weakref__': <attribute '__weakref__' of 'Province' objects>,'func': <function Province.func at 0x101897950>,'__init__': <function Province.__init__ at 0x1018978c8>}
obj1 = Province('山東',10000)
print(obj1.__dict__)
# 獲取 物件obj1 的屬性
# 輸出:{'count': 10000,'name': '山東'}
obj2 = Province('山西',20000)
print(obj2.__dict__)
# 獲取 物件obj1 的屬性
# 輸出:{'count': 20000,'name': '山西'}

7. str

如果一個類中定義了__str__方法,那麼在列印 物件 時,預設輸出該方法的返回值。

class Foo:
  def __str__(self):
    return 'laowang'
obj = Foo()
print(obj)
# 輸出:laowang

8、getitem、setitem、delitem

用於索引操作,如字典。以上分別表示獲取、設定、刪除資料

# -*- coding:utf-8 -*-
class Foo(object):
  def __getitem__(self,key):
    print('__getitem__',key)
  def __setitem__(self,key,value):
    print('__setitem__',value)
  def __delitem__(self,key):
    print('__delitem__',key)
obj = Foo()
result = obj['k1']   # 自動觸發執行 __getitem__
obj['k2'] = 'laowang'  # 自動觸發執行 __setitem__
del obj['k1']      # 自動觸發執行 __delitem__

9、getslice、setslice、delslice

該三個方法用於分片操作,如:列表

# -*- coding:utf-8 -*-
class Foo(object):
  def __getslice__(self,i,j):
    print('__getslice__',j)
  def __setslice__(self,j,sequence):
    print('__setslice__',j)
  def __delslice__(self,j):
    print('__delslice__',j)
obj = Foo()
obj[-1:1]          # 自動觸發執行 __getslice__
obj[0:1] = [11,22,33,44]  # 自動觸發執行 __setslice__
del obj[0:2]        # 自動觸發執行 __delslice__

更多關於Python相關內容感興趣的讀者可檢視本站專題:《Python面向物件程式設計入門與進階教程》、《Python資料結構與演算法教程》、《Python函式使用技巧總結》、《Python字串操作技巧彙總》、《Python編碼操作技巧總結》及《Python入門與進階經典教程》

希望本文所述對大家Python程式設計有所幫助。