簡體   English   中英

Python:如何為子類中的屬性設置默認值

[英]Python: How to set default value for a attribute in child class

我正在研究 Python,我已經定義了一個 Parent 類,如下所示

class Country:
    """Models countries"""
    def __init__(self, name, population, continent, zone):
        """Initiates the Country class"""
        self.na = name
        self.co = continent
        self.zo = zone
        self.po = population

我還在這個類中定義了兩個方法。 我創建了一個名為 Europe_country 的子類,我想在其中將 continent 和 zone 的默認值分別設置為“Europe”和“Temperate”。

我試過這樣做

class Europe_country(Country):
    """Models European countries specifically"""
    co = 'Europe'
    zo = 'Temperate'

europe_1 = Europe_country('Abc', 999)

但顯然我錯了。 我無法在互聯網上找到解決此問題的方法。 請幫忙。

我會做這樣的事情:

class Country:
    """Models countries"""
    def __init__(self, name, population, continent, zone):
        """Initiates the Country class"""
        self.na = name
        self.co = continent
        self.zo = zone
        self.po = population
        
class Europe_country(Country):
    """Models European countries specifically"""
    def __init__(self, name, population):
        super().__init__(name, population, "Europe", "Temperate")

europe_1 = Europe_country('Abc', 999)

使用預定義的值調用父構造函數並從子構造函數設置其余部分。

您的子類只接受 2 個輸入,因此您需要覆蓋父類的__init__以僅接受 2 個輸入,然后您可以調用父類的init傳遞您的兩個輸入和您的設置值。

class Country:
    """Models countries"""

    def __init__(self, name, population, continent, zone):
        """Initiates the Country class"""
        self.na = name
        self.co = continent
        self.zo = zone
        self.po = population

class Europe_country(Country):
    """Models European countries specifically"""
    co = 'Europe'
    zo = 'Temperate'

    def __init__(self, name, population):
        super().__init__(name, population, self.co, self.zo)

europe_1 = Europe_country('Abc', 999)

只需使用super強制初始化基類,同時在子類中獲取其他 2 個參數:

class Europe_country(Country):
    """Models European countries specifically"""
    def __init__(name, population):
        super().__init__(name, population, "Europe", "Temperate")

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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