033 Python語法之類的專有方法

weixin_34389926發表於2017-09-12

類的專有方法

__init__ :建構函式,在生成物件時呼叫
__del__ :解構函式,釋放物件時使用
__repr__ :列印,轉換
__setitem__ :按照索引賦值
__getitem__:按照索引獲取值
__len__:獲得長度
__cmp__:比較運算
__call__:函式呼叫
__add__:加運算
__sub__:減運算
__mul__:乘運算
__div__:除運算
__mod__:求餘運算
__pow__:乘方

str方法(str())

  1. str不重寫列印的是地址
  2. 重寫這個方法會列印你設定的返回值,必須返回字串

repr方法

iter方法(iter())

next方法(it.next())

class 女神備胎:
    def __init__(self):
        self.num = 1

    def __iter__(self):
        return self

    def __next__(self):
        self.num += 1
        if self.num > 108:
            raise StopIteration # 用for迴圈不會報錯,只會停止
        return self.num


for i in 女神備胎():
    print(i)

getitem方法(list[n[:m]])

class 集合:
    def __getitem__(self, item):
        list1 = [1, 2, 3, 4, 3, 2, 1]
        if isinstance(item, int):
            return list1[item]
        elif isinstance(item, slice):  # 切片
            return list1[item]


jihe = 集合()
for i in jihe:
    print(i)

print(jihe[1:3])

call方法(把物件當做一個函式用)

class PaoNiu:
    def __init__(self,name):
        self.name = name

    def __call__(self):
        print("我被呼叫了")

paoNiu = PaoNiu("Luo")
paoNiu()

lt方法(物件之間進行對比,返回True False)

print(cmp(1,2))# python3被棄用了這個方法
# 覆蓋了這個方法之後就可以排序了,也可以用lambda對類的某個屬性進行排序
def __lt__(self, value):    
    return self.num < value.num

hasattr(物件,方法字串)

  1. 判斷是否有該屬性/方法

getattr方法(獲取動態設定的屬性的值,重寫 物件.屬性 運算)

__getattr__(self, attr):

setattr方法(self, attr, data)

def __setattr__(self, attr, data):
    if attr=="tall":
        raise "不能進行賦值"
    else:
        super().__setattr__(attr, data)

delattr()方法(刪除屬性)

def __delattr__(self,attr):
    if attr=="money":
        raise Exception("不能刪除money")
    super().__delattr__(attr)

contains()方法(判斷資料是否在)

def __contains__(self,data):
    return data in self.list

index()方法(返回進位制)

def __index__(self,data):
    return data in self.list

new()方法(攔截物件建立,返回一個物件)

class B:
    pass
    
class A:
    def __new__(self):
        return B()
    
    def __init__(self):
        

new方法

  1. new是用來建立例項的,object裡面自動呼叫了,你如果需要重寫,必須要返回object.new(cls)
  2. call來建立new,new來建立init

metaclass方法

  1. 定義這個類如何被建立
  2. metaclass = MyType

get()方法

set()方法

delete()方法

相關文章