我试图了解有关课程和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()
答案 0 :(得分:9)
在子类上创建自定义初始值设定项,然后通过super
调用父类的初始值设定项:
class Person(Entity):
def __init__(self, state, name, age, gender):
self.gender = gender
super(Person, self).__init__(state, name, age)
答案 1 :(得分:1)
在过渡上,看起来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()