簡體   English   中英

我可以使用內置名稱作為Python類的方法名稱嗎?

[英]Can I use a builtin name as a method name of a Python class?

我有一個執行一些簡單數據操作的類,我需要三種方法:set,add,sub:

class Entry():  # over-simplified but should be enough for the question
    def __init__(self, value):
        self.set(value)
    def set(self, value):
        self.value=value
    def add(self, value):
        self.value += value
    def sub(self, value):
        self.value -= value

問題在於“ set”方法,但將其定義為類方法不應與“ set()”內置函數沖突。

Python樣式指南》指出,函數和方法的參數名稱不應該遮蓋內置函數,但是方法名稱就是這種情況嗎?

顯然,我可以選擇另一個方法名稱,但是這個問題更為通用,對於其他可能的方法名稱(例如,過濾器,求和,輸入)也有效。

關於不遮蓋內置名稱的整個事情是,您不想阻止自己使用它們,因此在您的代碼執行此操作時:

x.set(a) #set the value to a
b = set((1,2,3)) #create a set

您仍然可以訪問內置set因此不會發生沖突,唯一的問題是如果您想在類定義中使用set

class Entry():
    def __init__(self, value):
        self.set(value)
    def set(self, value):
        self.value=value
    possible_values = set((1,2,3,4,5)) #TypeError: set() missing 1 required positional argument: 'value'

在類定義內部(僅存在)內建的名稱被遮蓋,因此您必須考慮寧願解決該問題:在不太可能的情況下,您需要使用set來定義類范圍變量並獲取錯誤或使用方法的非直觀名稱。

還要注意,如果您喜歡使用對您有意義的方法名稱,並且還想在類定義中使用set ,那么對於python 3仍然可以使用builtins.set或對於python 2可以使用__builtin__.set來訪問它。

你很好。 如果內置程序是內置方法__init__ __iter__等,則您只是不想覆蓋它們,除非您正在實現這些方法期望的功能。

您正在“覆蓋”作為類方法的內置函數 ,這意味着您實際上並未覆蓋任何內容。 這是可以接受的。

命名空間是一個鳴喇叭的偉大構想 -在這種情況下一樣,名字set定義,但它僅僅存在於命名空間僅限於Entry級和不沖突的內置函數名稱。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM