[英]Python Class Inheritance: How to initialize a subclass with values not in the parent class
我正在嘗試更多地了解課程和 OOP。
如何讓我的Person
類使用Entity
所有值以及可能不包含在Entity
類中的值進行初始化?
例如, Person
和Spirit
都繼承自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.