2014-01-12 169 views
3

您好我已經寫了下面的代碼:在Python中別名方法名的最好方法是什麼?

class Car: 
    def __init__(self): 
    self._create_aliases() 

    def take_to_repair_shop(self): 
    pass 

    def drive_to_the_beach(self): 
    pass 

    def _create_aliases(self): 
    Car.repair = Car.take_to_repair_shop 
    Car.beach = Car.drive_to_the_beach 

我希望用戶在使用的時間越長,更清晰的名稱,或在較短的名稱的選項。 我將_create_aliases轉換爲實例方法,以便它可以被重寫。

這有什麼問題嗎?這是一個很好的設計模式嗎?

+1

在Python,避免非功能性的別名。無緣無故,您正在增加界面的複雜性。 「應該有一個 - 最好只有一個 - 明顯的做法。」 – jfs

+0

你如何定義非功能性? – user553965

+1

有些情況下你可能需要它,例如'next_'作爲'__next__'的別名可以用來支持來自同一個源的Python 2和Python 3中的迭代器協議。 – jfs

回答

4

你並不需要做的是在__init__

class Car: 

    def take_to_repair_shop(self): 
     pass 

    def drive_to_the_beach(self): 
     pass 

    repair = take_to_repair_shop # <--- 
    beach = drive_to_the_beach # <--- 

例子:

>>> car = Car() 
>>> car.repair() 
>>> car.take_to_repair_shop() 
>>> 
+0

哦,對,我猜一個子類總是可以改變或刪除別名而不會覆蓋任何東西。謝謝 – user553965

+0

@ user553965不可以。您不能刪除繼承的內容而不覆蓋(遮蔽)它。 – glglgl

+0

你以後可以這樣做:'del Car.repair',或者在一個子類中:'repair = None'來消除別名 – user553965

相關問題