python【系列教程】之類的特殊方法

一、常見的特殊方法

# 重寫__repr__方法(相當於java中的toString方法)
class Dog:
    name = ''
    age = 0

    def __repr__(self) -> str:
        return "name:" + self.name + ",age:" + str(self.age)


d = Dog()
d.name = '小狗'
d.age = 20
print(d)


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

    def __repr__(self):
        return "Apple[]"


a = Apple('紅色', 5.68)
print(a)

 需要說明的是,不要以爲對一個變量執行del操作,該變量所引用的對象就會被回收 -- 只有當對象的引用計數變成0時,該對象纔會被回收,因此,如一個對象有多個變量引用它 ,那麼del其中一個變量是不會回收該對象的。

 

 

二、與反射相關的屬性和方法

#與反射相關的屬性和方法
"""
hasattr(obj,name) 檢查對象是否包含name的屬性或者防範
getattr(obj,name[,default]) 獲取對象中名字爲name的屬性的屬性值
setattr(obj,name,value,/) 將obj對象的name屬性設爲value
"""

 

三、與序列相關的特殊方法

四、生成器

# 實現迭代器
class Fibs:
    def __init__(self, len):
        self.first = 0
        self.sec = 1
        self.__len = len

    def __next__(self):
        if self.__len == 0:
            raise StopIteration
        # 完成數列計算
        self.first, self.sec = self.sec, self.first + self.sec
        self.__len -= 1
        return self.first

    def __iter__(self):
        return self


fibs = Fibs(10)
print(next(fibs))
for el in fibs:
    print(el, end=' ')

# 創建生成器
"""
1.定義一個包含yield語句的函數
2.調用第一步創建的函數得到生成器


"""


def test(val, step):
    print("函數開始執行~~~~~~~~~~~~")
    cur = 0
    # 遍歷0~val
    for i in range(val):
        cur += i * step
        yield cur


"""yield cur語句的作用
每次返回一個值,有點類似於return
凍結執行,程序每次執行yield語句時就會被暫停。
在程序被yield語句凍結之後,當程序再次調用next()函數獲取生成器的下一個值時,
程序纔會繼續向下執行
需要指出的是,調用包含yield語句的函數並不會立即執行,它只會返回一個生成器。
只有當程序通過next()函數調用生成器或者遍歷生成器時,函數纔會真正執行
"""
t = test(10, 2)
# 獲取下一個值
print(next(t))
print(next(t))
# 將生成器轉換成列表
l = list(t)
t = tuple(t)

#close() 該方法用於停止生成器,關閉生成器之後,無法再獲取下一個值,否則就會報錯
#throw() 該方法用於在生成器內部(yield語句內)引發一個異常

 

五、運算符重載的特殊方法

 

 

 

 

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章