1. 程式人生 > >Python3類的特殊方法

Python3類的特殊方法

常見的特殊方法

__repr__() 物件轉字串方法

__repr__() 方法實現這樣一個功能:當程式設計師直接列印該物件時,系統將會輸出該物件的“自我描述”資訊,用來告訴外界該物件具有的狀態資訊。

class Apple:
    def __init__(self, color, weight):
        self.color = color
        self.weight = weight

    def __repr__(self):
        return "Apple [color = " + self.color + ", weight = " + str(self.weight) +"]"

a = Apple("紅色", 5.68)
print(a) # 輸出 Apple [color = 紅色, weight = 5.68]

__del__() 析構方法

物件被銷燬時自動執行的方法

__dir__() 方法

用於列出該物件內部的所有屬性(包括方法)名,該方法將會返回包含所有屬性(方法)名的序列

__dict__ 屬性

用於檢視物件內部儲存的所有屬性名和屬性值組成的字典

__getattr__()、__setarr__() 等方法

當程式操作(包括訪問、設定、刪除)物件的屬性時,Python系統同樣會執行該物件特定的方法

  • __getattribut__(self, name):當程式訪問物件的 name 屬性時被自動呼叫
  • __getattr__(self, name):當程式訪問物件的 name 屬性且該屬性不存在時被自動呼叫
  • __setattr__(self, name):當程式對物件的 name 屬性賦值時被自動呼叫
  • __delattr__(self, name):當程式刪除物件的 name 屬性時被自動呼叫

與反射相關的屬性和方法

動態操作屬性

在動態檢查物件是否包含某些屬性(包括方法)相關的函式有如下幾個

  • hasattr(obj, name):檢查 obj 物件是否包含名為 name 的屬性或方法
  • getattr(obj, name[,default]):獲取 obj 物件中名為 name 的屬性的屬性值
  • setattr(obj, name, value):將 obj 物件的 name 屬性設為 ```value``

__call__屬性

上面的 hasattr() 函式可以判斷指定屬性(或方法)是否存在,但到底是屬性還是方法,則需要進一步判斷它是否可呼叫

#!/usr/bin/env python
# -*- coding:utf-8 -*-
# Author:Leo Song

class User:
    def __init__(self, name, passwd):
        self.name = name
        self.passwd = passwd

    def validLogin(self):
        print("驗證%s的登入" % self.name)

u = User("alex", "abc123")

print(hasattr(u.name, '__call__')) # False
print(hasattr(u.validLogin, '__call_