iT邦幫忙

2024 iThome 鐵人賽

DAY 12
0
Python

python零之旅系列 第 12

DAY12. Python中的方法

  • 分享至 

  • xImage
  •  

方法鏈

方法鏈(Method Chaining)是一種允許我們將多個方法連續呼叫的程式設計技巧,通常用於提升程式碼的簡潔性與可讀性。透過方法鏈,我們可以在一行程式碼中連續執行多個方法,不必多次引用同一個物件。

方法鏈的核心在於,每個方法在執行完畢後都返回 self,即方法的呼叫對象本身,從而允許我們在同一個物件上不斷地呼叫其他方法。

舉例來說,如果有一個操作字串的類別,我們可以使用方法鏈的方式來連續呼叫 .strip(), .lower(),以及 .replace() 方法,達到對字串進行多步驟操作的效果。方法鏈的應用常見於建構函式(Builder Pattern)、數據處理、以及設定物件屬性等場合,讓程式碼變得更為簡潔、直觀。

接下來,我們來練習方法鏈的應用:

class Draw:
    def pick(self):
        print("在挑選顏色")
        return self #回傳物件本身
        
    def use(self):
        print("在挑選筆尖粗細")
        return self 
        
    def take(self):
        print("拿起畫筆")
        return self 
        
    def down(self):
        print("放下畫筆")
        return self 

draw = Draw()
draw.pick().use().take().down() #方法鏈   

Super 方法

super()是用於在子類別中呼叫父類別方法的內建函式,常用於繼承情況下。通常,我們會在子類別的__init__方法中使用。

super().init() 是來呼叫父類別的初始化方法,確保父類別的屬性和設定能夠被執行。super() 也可用於呼叫父類別的其他方法,確保所有父類別的方法都按正確順序執行。這使程式碼更簡潔、易於維護,並促進類別間的重用。

以下是範例:

class Rectengle:
    def __init__(self, length, width)
        self.length = length
        self.width = width
        print("矩形初始化已執行")
        
class Square(Rectengle):
    def __init__(self, length, width):
        super().__init__(length, width)
        print("正方形初始化已執行")

class Cube(Rectengle):
    def __init__(self, length, width, height):
        super().__init__(length, width)
        self.height = height
        print(f"立方體的長寬高是{height}, {width}, {height}")
        
    
        
square = Square(500, 500)
cube = Cube(10, 20, 30)

用物件為引數

在 Python 中,物件可以作為引數傳遞給函式或方法。當我們將物件作為引數傳遞時,函式可以直接訪問並修改這個物件的屬性和方法,對於可變物件(如列表、字典、自訂類別的物件)也是如此。

這使我們能夠在函式中操作原始物件,而不需要在不同作用域間複製資料,從而提高效能和記憶體利用效率。

此外,透過將物件作為引數,我們可以將相關的資料和行為封裝在一起,讓函式能夠處理更複雜的資料結構,並增強程式的靈活性與可讀性。

以下是用物件為引數的範例:

class Flower:
    color = None
    
def change_color(flower, color)
    flower.color = color
    
flower1 = Flower()
flower2 = Flower()
flower3 = Flower()

print(flower1.color)
print(flower2.color)
print(flower3.color)

change_color(flower1, "red")
change_color(flower2, "blue")
change_color(flower3, "yellow")

print(flower1.color)
print(flower2.color)
print(flower3.color)

鴨子型別

Python 中的鴨子型別(Duck Typing)是一種動態型別概念,其物件型別由行為或方法屬性來決定,並不是繼承關係或具體型別。

它源自於一句諺語:「如果它走起來像鴨子,叫起來也像鴨子,那它就是鴨子。」

只要物件具備需要的方法或屬性,即符合要求,可以當作同一類別使用,無需強制繼承特定類別。利用這種特性,函式可以處理不同型別的物件,只要它們具備必要的行為即可,更具彈性和通用性。

讓我們看看鴨子型別的範例:

class Duck:
    def walk(self):
        print("鴨子在走路")
    def talk(self):
        print("鴨子在說話")

class chicken:
    def walk(self):
        print("雞在走路")
    def talk(self):
        print("雞在說話")

class Person():
    def catch(self, duck):
        duck.walk()
        duck.talk()

duck = Duck()
person = Person()
person.catch(duck)

chicken = Chicken()
person = Person()
person.catch(chicken)

上一篇
DAY11. Python的物件導向
下一篇
DAY13. Python中的運算符與函式
系列文
python零之旅30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言