![](/img/trans.png)
[英]Use builtin python function when imported a function of same name
[英]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.