首頁  >  文章  >  後端開發  >  Python 中 `__init__()` 內部和外部定義的變數有什麼不同?

Python 中 `__init__()` 內部和外部定義的變數有什麼不同?

Linda Hamilton
Linda Hamilton原創
2024-10-27 03:54:02208瀏覽

  What's the Difference Between Variables Defined Inside and Outside `__init__()` in Python?

深入研究__init__() 內部和外部變數的差異

考慮以下兩個類別:

<code class="python">class WithClass ():
    def __init__(self):
        self.value = "Bob"
    def my_func(self):
        print(self.value)

class WithoutClass ():
    value = "Bob"

    def my_func(self):
        print(self.value)</code>

乍一看,這些類別看起來是相同的。然而,一個微妙的差異在於值變數的放置。在第一個類別 (WithClass) 中,value 在 __init__() 方法內初始化,而在第二個類別 (WithoutClass) 中,它在方法外部宣告。

變數在__init__() 之外(Class屬性)與__init__() 內的變數(實例屬性)

變數的位置決定了它是類屬性還是實例屬性。

  • 類別屬性: 在 __init__() 之外宣告的變數由該類別的所有實例共用。可以使用類別名稱來存取它們,例如 WithoutClass.value。
  • 實例屬性: 在 __init__() 內建立並以 self 開頭的變數。特定於每個物件實例。它們只能透過物件本身來訪問,例如instance_of_WithClass.value。

放置的後果

這種差異會對程式碼行為和維護產生影響。

  • 方法內的使用:類別屬性可用於類別中的所有方法,無論它們在何處聲明。另一方面,實例屬性必須先聲明才能在方法中使用。
  • 從類別外部存取:可以使用類別從類別外部存取類別屬性名稱。然而,實例屬性只能透過類別的實例來存取。
  • 操作屬性:類別屬性影響類別的所有實例。修改類別屬性將變更其所有實例的值。相反,實例屬性僅影響它們所屬的特定物件。

放置位置的選擇

放置變數的位置的選擇取決於您的方式希望它在類別中表現良好。如果您希望共用值在實例之間保持不變,請使用類別屬性。如果您希望每個實例都有唯一的值,請在 __init__() 中建立它作為實例屬性。

透過了解 __init__() 內部和外部變數之間的區別,您可以設計具有清晰且可預測行為的類,避免潛在的混亂和陷阱。

以上是Python 中 `__init__()` 內部和外部定義的變數有什麼不同?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn