簡體   English   中英

Python 類繼承:如何使用不在父類中的值初始化子類

[英]Python Class Inheritance: How to initialize a subclass with values not in the parent class

我正在嘗試更多地了解課程和 OOP。

如何讓我的Person類使用Entity所有值以及可能不包含在Entity類中的值進行初始化?

例如, PersonSpirit都繼承自Entity 但是,只有Person才會有gender 我怎樣才能讓Person初始化為gender

在那之后,我是否仍然能夠像下面所做的那樣創建Person的實例並調用describe()

class Entity(object):

    def __init__(self, state, name, age):
        self.state = state
        self.name = name
        self.age = age

class Person(Entity):

    def describe(self):
        print "Identification: %s, %s, %s." % (self.state, self.name, self.age)

class Spirit(Entity):
    pass  # for now

steve = Person("human", "Steve", "23" # can I then list gender here?)
steve.describe()

在子類上創建自定義初始化程序,然后通過super調用父類的初始化程序:

class Person(Entity):
    def __init__(self, state, name, age, gender):
        self.gender = gender
        super(Person, self).__init__(state, name, age)

過渡性地,它看起來像 Py 3.x 的版本(不確定是哪個)允許super()這個簡潔版本:

def __init__(self, state, name, age, gender):
        self.gender = gender
        # Prototype initialization 3.x:
        super().__init__(state, name, age)

一直在使用數據類試驗 SQLAlchemy 模型,所以當我通過查看 Python 繼承的所有內容進行壓縮時,我覺得這可能會擴展答案:

from dataclasses import dataclass

@dataclass
class Entity():
    state: str
    name: str
    age: int

@dataclass
class Person(Entity):
    gender: str

    def describe(self):
        print("State: {state}, Name: {name}, Age: {age}, Gender: {gender}"
            .format(state=self.state, name=self.name, age=self.age, gender=self.gender))

man = Person("human", "humanname", 21, "cisgendered")

man.describe()

暫無
暫無

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

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