继承
概念:
如果两个或者两个以上的类具有相同的属性和方法,我们可以抽取出来一个类将共同的部分声明到被抽取的类中。
这个被抽取出来的类我们称之为父类,超类,基类
其他类我们称之为子类/派生类
父类与子类之间的关系我们称之为继承。
注意:当一个子类没有继承其他类的时候,则它默认继承object类,换句话说,object类是一切类的基类。
在python中我们的继承分为单继承与多继承。
单继承:
当一个子类只有一个父类的时候,我们称之为单继承。
class 类名(父类)
类体
注意:若未指明父类的时候,默认继承object类,object类可以省略不写。
继承的特点:
子类可以直接使用父类未私有化属性以及方法,但是父类不能使用子类特有的属性以及方法。
父类私有化的属性与方法,我们不能直接访问,但是我们可以通过它暴露出来的接口进行访问。
若子类拥有特殊的属性的时候,我们需要在子类重写_ _ init _ _ 方法,在子类的init方法中,我们需要将子类拥有的所有的属性都声明(包括父类中的),还需要手动调用父类中的init方法 super()._ _ init _ _/ 类名. _ _ init _ _
当子类中不存在特殊的属性[我们没有重写init方法的时候],这时候系统会自动调用父类中的init方法,不需要我们自己手动调用。
多继承:
当一个子类有多个父类的时候我们称之为多继承。
使用多继承的时候,当两个父类中的属性不相同的时候,默认调用写在继承列表里面最前面的位置的父类的构造函数。
若两个父类中的构造函数我们都想调用的情况下,这时候我们需要自己手动来进行调用。类名._ _ _ init _ _
当多个父类中出现相同的方法名的时候,子类优先选择写在继承列表前面的那个
class 类名 (父类1,父类2,…)
类体
注意:()中为我们的继承列表。
多态
多态:本质上指一类事物的多种表现形态,它是依赖于继承而存在。
在python中不存在真正的多态,因为python是一个动态数据类型的语言。
鸭子模型:
如果有一只鸟,走路像鸭子,叫声像鸭子,那么我们就可以称这只鸟叫鸭子。
我们不关心它的数据类型,我们只关心它的使用。
isinstance(obj,type)
功能:判断某个对象是否属于某种类型
当这个对象属于这种类型或者属于这种类型的子类,那么返回Ture,否则返回False
dir(object)
功能:查看指定对象的所有的属性以及方法,以列表的方式返回。
函数重启
当我们打印对象的时候,默认情况下显示的是地址,当我们不想让其显示地址的时候,我们可以重写系统中STR函数,当执行print()或者str()函数的时候,会自动调用此方法。因此_ _ str _ _ 函数的返回值就是我们打印对象的信息。
当一个类中重写了_ _ repr_ _ 函数,而没有重写_ _ str _ _ 函数的时候,我们可以使用_ _ str _ _ = _ _ repr_ _
运算符重载
+运算符重载,更改add
def __add__(self, other):
return Person(self.name,self.age + other.age)