首頁 > 後端開發 > Python教學 > 如何在Python中存取父類別屬性?

如何在Python中存取父類別屬性?

WBOY
發布: 2023-08-26 10:17:16
轉載
1698 人瀏覽過

如何在Python中存取父類別屬性?

在物件導向程式設計中,繼承允許我們建立繼承現有類別的屬性和方法的新類別。這個強大的概念使我們的程式能夠實現程式碼重用、模組化和可擴展性。在深入存取父類別屬性之前,讓我們快速回顧一下繼承。在Python中,當一個類別繼承另一個類別時,它會取得父類別中定義的所有屬性和方法。這種機制允許我們創建專門的類別來繼承和擴展更通用的基類的功能。衍生類別也稱為子類,而繼承自的類別稱為父類別或基底類別。

###例###

這裡有一個簡單的範例來說明繼承的概念 -

雷雷 ###輸出### 雷雷

在這個例子中,我們有兩個類別:Parent 和 Child。 Child 類別使用語法 class Child(Parent) 從 Parent 類別繼承。這意味著Child類別繼承了Parent類別中定義的所有屬性和方法。 Child 類別也有自己的屬性,稱為 child_attribute。

存取父類別屬性

要在 Python 中存取父類別屬性,您可以將點符號與實例或類別名稱一起使用。您選擇的方法取決於上下文和您的特定要求。讓我們探討一下存取父類別屬性的不同方法:

使用實例

如果您有子類別的實例,您可以透過實例直接存取父類別的屬性。實例保留了從父類別繼承的所有屬性和方法,使您能夠輕鬆存取它們。

###例###

這是一個範例

雷雷 ###輸出### 雷雷

在此範例中,child.parent_attribute 存取父類別中定義的parent_attribute。透過實例存取屬性,您可以檢索與該屬性關聯的值。

使用類別名稱 除了透過實例存取父類別屬性外,還可以使用子類別名稱存取。當您沒有可用的實例,但仍想要直接存取父類別屬性時,此方法很有用。

##範例

#這是一個範例

雷雷 ###輸出### 雷雷

在這種情況下,Child.parent_attribute 存取父類別中定義的parent_attribute。透過使用類別名,可以直接存取父類別屬性,無需實例。

存取父類別方法

繼承不僅允許我們存取父類別的屬性,還允許我們存取父類別的方法。當一個子類別從一個父類別繼承時,它繼承了父類別中定義的所有方法。這意味著你可以在子類別中使用實例或類別名稱來呼叫這些方法。

###例### 這是一個範例

雷雷 ###輸出### 雷雷

在這個例子中,Child類別繼承了Parent類別的parent_method。我們可以使用 Child 類別的實例 (child.parent_method()) 或直接使用類別名稱 (Child.parent_method()) 來呼叫此方法。

覆寫父類別屬性

在某些情況下,您可能需要在子類別中重寫父類別屬性。覆寫意味著為子類別中的特定屬性提供不同的值或行為。透過在子類別中重新定義屬性,您可以自訂其值,同時仍可使用前面討論的技術存取父類別屬性。

##範例

#這是一個範例

雷雷 ###輸出### 雷雷

在此範例中,Parent 類別和 Child 類別都有一個名為共用屬性的屬性。然而,在子類別中,我們用不同的值重新定義屬性。當我們使用子類別的實例 (child.shared_attribute) 存取屬性時,我們會擷取子類別中定義的覆寫值。

優先繼承

#Python支援多重繼承,這表示一個類別可以繼承多個父類別。在使用多重繼承時,存取父類別屬性可能會變得更加複雜。在這種情況下,您可能需要使用方法解析順序(MRO)或super()函數來明確指定要存取的父類別屬性。

Example

这是一个多继承和访问父类属性的示例 

class Parent1:
   def __init__(self):
      self.shared_attribute = "I'm from Parent1"

class Parent2:
   def __init__(self):
      self.shared_attribute = "I'm from Parent2"

class Child(Parent1, Parent2):
   def __init__(self):
      super().__init__()

child = Child()
print(child.shared_attribute)  # Accessing parent class attribute in multiple inheritance
登入後複製

Output

I'm from Parent1
登入後複製

In this example, the Child class inherits from both Parent1 and Parent2 classes. When we create an instance of the Child class and access the shared_attribute, it retrieves the value defined in Parent1.

受保护和私有属性

受保护的属性通常以单下划线(_)作为前缀,表示它们不应该在类外部直接访问,但仍然可以被子类访问。另一方面,私有属性通常以双下划线(__)作为前缀,表示它们只能在类内部访问。

示例

这是一个示例

class Parent:
   def __init__(self):
      self._protected_attribute = "I'm a protected attribute"
      self.__private_attribute = "I'm a private attribute"

class Child(Parent):
   def __init__(self):
      super().__init__()

child = Child()
print(child._protected_attribute)   # Accessing protected attribute
print(child._Parent__private_attribute)   # Accessing private attribute
登入後複製

Output

I'm a protected attribute
I'm a private attribute
登入後複製

在这个例子中,父类有一个受保护的属性_protected_attribute和一个私有属性__private_attribute。子类Child仍然可以访问这两个属性。然而,访问私有属性需要使用名称混淆技术,格式为_ClassName__private_attribute。

Conclusion

继承是一种强大的功能,它允许我们创建类层次结构并在现有功能的基础上构建。通过访问父类属性,我们可以在程序中实现代码重用和模块化。

我们学到了可以使用实例或类名来访问父类属性。通过实际示例,我们看到了如何使用子类的实例访问父类属性,以及如何直接使用类名访问它们。

以上是如何在Python中存取父類別屬性?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

來源:tutorialspoint.com
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板