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__来把这些从超类继承来的字段,给原样初始化;然后再只对子类特有的字段做初始化即可,而不再从母类复制粘贴代码,或者“保持同步”。
Sign in to make a reply
幽境的荼蘼
在vscode里面有代码自动补全功能。比如这里在编辑Proletarian子类的时候键入def __init__时,选中补全块就会自动出来以下内容
重要的是这个super().__init__。虽然子类多一个income字段,但子类也有name, gender字段,而这两字段的初始化和超类一样。
因此是要使用 super().__init__来把这些从超类继承来的字段,给原样初始化;然后再只对子类特有的字段做初始化即可,而不再从母类复制粘贴代码,或者“保持同步”。