[英]Re-use argument or use self
當定義一個類並且您需要兩次使用一個參數時,是繼續使用該參數還是在創建后立即使用 self 版本更好?
class Example:
def __init__(self, name):
self.name = name
self.name_upper = name.upper()
或者
class Example:
def __init__(self, name):
self.name = name
self.name_upper = self.name.upper()
那么列表呢?
class Example:
def __init__(self, name):
self.name = name
self.name_list = [name,name,name]
class Example:
def __init__(self, name):
self.name = name
self.name_list = [self.name,self.name,self.name]
TL;DR:在您描述的特定情況下,這無關緊要。 這是速度和安全性與未來變化之間的一個很小的權衡,但沒有正確的答案。
如果在將參數存儲在屬性中之前沒有對其進行按摩,那么這並不重要。 使用不合格的名稱將是稍快( self.name
上CPython的涉及便宜LOAD_FAST
和顯著更昂貴的,如果還是便宜的絕對數量來看, LOAD_ATTR
;普通name
的爭論只是一個LOAD_FAST
),所以如果你是100 %確定你永遠不會在存儲之前按摩參數(例如沒有self.name = int(name)
), self.name = int(name)
避免self
會加快初始化速度。
也就是說,很少有人能確定,所以使用self.name
更安全。 即使在按摩參數時,您也可以通過執行以下操作來拆分差異:
self.name = name = int(name)
它存儲回屬性和本地(通過DUP_TOP
和STORE_FAST
,CPython 中最便宜的兩個操作代碼),因此您可以通過任何一種方式獲得相同的按摩值,以及來自不合格名稱的廉價加載。
這是一個范圍的問題。 在下面的示例中,變量'name'
僅在方法'__init__'
可見,而變量'self.name_list'
可以在類中的任何方法中使用。
class Example :
def __init__ (self, name) :
self.name_list = [name] * 3
def show_variables (self) :
print (self.name_list)
print (name) # gives 'name' is not defined error
this = Example ('This example')
this.show_variables ()
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.