Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/315.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 使用子类和超类时uuu init_uuuuu的参数_Python_Parent Child_Super - Fatal编程技术网

Python 使用子类和超类时uuu init_uuuuu的参数

Python 使用子类和超类时uuu init_uuuuu的参数,python,parent-child,super,Python,Parent Child,Super,我花了一个愉快的星期六来深入研究Python对象,并提出了一个简单的问题,这个问题不是令人兴奋,而是有点好奇 假设我有一个基类和一个子类: 我在看员工类 给定: 我们使用的是super(),其中包含参数, 为什么在python中,\uuuuu init\uuuu仍然要求我们键入first,last? 这难道不应该从我们使用super推断出来吗?似乎是额外的重复打字。作者这样做的原因是什么?原因是您可以进一步自定义子类。在您的示例中,当您仍然要输入第一个和最后一个时,会比较麻烦,因为您必须键入两次

我花了一个愉快的星期六来深入研究Python对象,并提出了一个简单的问题,这个问题不是令人兴奋,而是有点好奇

假设我有一个基类和一个子类:

我在看员工类

给定:
我们使用的是
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")