簡體   English   中英

重用參數或使用自我

[英]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_TOPSTORE_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.

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