Python-继承

继承

  • 单继承,多继承

  • 金典式,新式类

在Python2中:python2.2之前都是金典类,python2.2之后出现了新式类,继承object就是新式类

在python3:只有新式类,不管你继不继承object都是新式类

class Animal:
   def __init__(self,name,age,sex):
       self.name = name
       self.age = age
       self.sex = sex
   def eat(self):
       print("吃")
class Human(Animal):
   pass
class Dog(Animal):
   pass

# 通过之类的类名使用父类的属性和方法
Human.eat(1) # 通过类名使用父类方法时要添加实参
Human.__init__(Human,"老大",22,"男")

# 通过之类的对象使用父类的属性和方法
p = Human("老大",22,"男")

查找顺序(不可逆,就近原则):

  • 通过子类,类名使用父类属性或方法(查找顺序):当前类,当前类的父类,当前类父类的父类 ---->

  • 通过子类对象使用父类的属性或方法(查找顺序):先找对象,实例化这个对象的类,当前类的父类

继承的优点:

1.减少重复代码

2.结构清晰,规范

3.增加耦合性(不在多,在精)

 

方法一:不依赖(不需要)继承

# 在本类的__init__方法中,在使用另一个类名的__init__方法进行初始化
def __init__(self,name,age,sex):
   A.__init__(self,name,age)
   self.sex = sex

方法二:依赖(需要)继承

def __init__(self,name,age,sex): # 初始化方法
   super().__init__(name,age) # 重构方法
   self.sex = sex


多继承

多继承就是继承多个父类

金典类:

  • 多继承时从左向右执行

  • (深度优先)左侧优先,一条路走到头,找不到回到起点向右查询

新式类:c3算法

mro(Child(Base1,Base2)) = [ Child ] + merge( mro(Base1), mro(Base2), [ Base1, Base2] )

查多继承执行顺序:

print(类名.mro())

金典类不能使用mro,只有新式类才能使用mro

面向对象三大特征

1.继承

2.封装:将一些代码或数据存储到某个空间中,如:函数,对象,类

3.多态:多种形态,在python中默认就是多态

print带色

开头格式:\033[

结尾格式:\033[0m

开头部分三个参数:

  • 显示方式

  • 字体颜色

  • 背景色

print("\033[1;35m字体变色,但无背景色 \033[0m")
print("\033[1;35;43m字体变色,有背景色 \033[0m")
posted on 2020-03-05 12:12  we我们  阅读(170)  评论(0)    收藏  举报