Python 使用子类和超类时uuu init_uuuuu的参数
我花了一个愉快的星期六来深入研究Python对象,并提出了一个简单的问题,这个问题不是令人兴奋,而是有点好奇 假设我有一个基类和一个子类: 我在看员工类 给定:Python 使用子类和超类时uuu init_uuuuu的参数,python,parent-child,super,Python,Parent Child,Super,我花了一个愉快的星期六来深入研究Python对象,并提出了一个简单的问题,这个问题不是令人兴奋,而是有点好奇 假设我有一个基类和一个子类: 我在看员工类 给定: 我们使用的是super(),其中包含参数, 为什么在python中,\uuuuu init\uuuu仍然要求我们键入first,last? 这难道不应该从我们使用super推断出来吗?似乎是额外的重复打字。作者这样做的原因是什么?原因是您可以进一步自定义子类。在您的示例中,当您仍然要输入第一个和最后一个时,会比较麻烦,因为您必须键入两次
我们使用的是
super()
,其中包含参数,为什么在python中,
\uuuuu init\uuuu
仍然要求我们键入first,last
?这难道不应该从我们使用super推断出来吗?似乎是额外的重复打字。作者这样做的原因是什么?原因是您可以进一步自定义子类。在您的示例中,当您仍然要输入
第一个
和最后一个
时,会比较麻烦,因为您必须键入两次,如下所示:
class Employee(Person):
def __init__(self, first, last):
super().__init__(first, last)
emp1 = Employee("Bob", "Jones")
但是,您可能希望自动填充其中一些值。在本例中,可能是姓氏常见的FamilyMember
类
class FamilyMember(Person):
def __init__(self, first):
super().__init__(first, last="Erikson")
fm1 = FamilyMember("Paul")
在这种情况下,您只需要为
家庭成员输入第一个变量,然后将自动填写最后一个变量。如果您想使用super()。\uuuu init\uuuuuuuuuu(第一个,staffname)
,例如staffname
位于staffnum
之后,那么,子类应该是有选择性的,并且可以让你从基类中挑选你想要的…当你说“自动填充”时,有没有更专业的名称?它被“重写”了?@MonicaHeddneck我听说过默认值,但我不知道这是否是它的正式名称。虽然在你给出的示例中这没有什么意义,但我在游戏开发中使用了相当多的默认值。我通常有一个基本的实体类,其中包含ennemies、可移动对象和从中分支出来的玩家。例如,在这种情况下,我可以为敌人设置图像的默认值,这样我就不必在每个对象中重新键入它。
class FamilyMember(Person):
def __init__(self, first):
super().__init__(first, last="Erikson")
fm1 = FamilyMember("Paul")