Discuss / Python / 补充一条关于初始化的

补充一条关于初始化的

Topic source
class Person(object):
    def __init__(self, name='张三', gender='Male'):
        self.name = name
        self.__gender = gender

    def get_gender(self):
        return self.__gender


class Proletarian(Person):
    def set_income(one, income):
        one.__income = income
        return one

    def print_income(one):
        print('%s 收入仅有 %d 刀.' % (one.name, one.__income))

    def __init__(self, name, gender, income):
        super().__init__(name=name, gender=gender)
        self.set_income(income)

在vscode里面有代码自动补全功能。比如这里在编辑Proletarian子类的时候键入def __init__时,选中补全块就会自动出来以下内容

    def __init__(self, name, gender):
        super().__init__(name=name, gender=gender)

重要的是这个super().__init__。虽然子类多一个income字段,但子类也有name, gender字段,而这两字段的初始化和超类一样。

因此是要使用 super().__init__来把这些从超类继承来的字段,给原样初始化;然后再只对子类特有的字段做初始化即可,而不再从母类复制粘贴代码,或者“保持同步”。


  • 1

Reply