可参考链接:is-a和has-a的区别
1、has a 关系
- has a :一个类中使用了另外一种自定义的类型
- 类型:
系统类型 str、 int、 float、 list 、dict 、 tuple、 set 自定义类型 算是自定义的类,都可以将其当成一种类型。类也可以看成一种类型。
2、is a 关系(继承)
-
简单说:就是继承关系。
-
如果类中不定义__init__,调用父类 super class的__init__
-
如果类继承父类也需要定义自己的__init__,就需要在当前类的__init__调用一下父类__init__
-
如何调用父类__init__:
super().__init__(参数) super(类名,对象).__init__(参数)
-
如果父类有eat()方法,子类也定义了一个eat()方法,默认搜索的原则:先找当前类,再去找父类。父类提供的方法不能满足子类的需求,就需要在子类中定义一个同名的方法,这种行为:重写(override)。
-
子类的方法中也可以调用父类方法:super().方法名(参数)。
-
示例:
class Person: def __init__(self,name,age): self.name = name self.age = age class Student(Person): def __init__(self,name,age,clazz): super().__init__(name,age) self.clazz = clazz class Employee(Person): def __init__(self,name,age,employer,salary): #报阴影 # 如何调用父类__init__ super().__init__(name,age) self.employer = employer self.salary = salary class Doctor(Person): def __init__(self,name,age): super().__init__(name,age) self.name = name self.age = age