当前位置: 移动技术网 > IT编程>脚本编程>Python > python基础入门之十六 —— 继承

python基础入门之十六 —— 继承

2020年03月31日  | 移动技术网IT编程  | 我要评论

承德避暑山庄导游词,一夫九妾难伺候,简易车棚

一、定义

python面对对象的继承指的是多个类之间的所属关系,即子类默认继承父类的所由属性和方法

class a(object):
    def __init__(self):
        self.num=1
    def info_print(self):
        print(self.num)

#子类b
class b(a):
    pass

resoult=b()
resoult.info_print()  #1

二、单继承和多继承

  • 单继承:
  • 多继承:一个类同时继承多个父类

p.s:当一个类有多个父类得时候,同名属性和方法默认使用第一个父类的。

class a(object):
    def __init__(self):
        self.str = 'a类的初始定义'

    def print_str(self):
        print(f'运用{self.str}')

class b(object):
    def __init__(self):
        self.str = 'b类的初始定义'

    def print_str(self):
        print(f'运用{self.str}')

class c(a, b):
    pass

class d(b, a):
    pass

c = c()
c.print_str()  # 运用a类的初始定义
d = d()
d.print_str()  # 运用b类的初始定义

三、子类重写父类同名方法和属性

子类和父类具有同名属性和方法,默认使用子类的同名属性和方法

class a(object):
    def __init__(self):
        self.str = 'a类的初始定义'

    def print_str(self):
        print(f'运用{self.str}')

class b(object):
    def __init__(self):
        self.str = '子类b类的初始定义'

    def print_str(self):
        print(f'运用{self.str}')

b = b()
b.print_str()  # 运用子类b类的初始定义

四、子类调用父类的同名方法和属性

class a(object):
    def __init__(self):
        self.str = 'a类的初始定义'

    def print_str(self):
        print(f'运用{self.str}')

class b(object):
    def __init__(self):
        self.str = 'b类的初始定义'

    def print_str(self):
        print(f'运用{self.str}')

class c(a, b):
    def __init__(self):
        self.str = '子类c类的初始定义'

    def print_str(self):
        print(f'运用{self.str}')

    def print_self_str(self):
        self.__init__()
        self.print_str()
        # self即函数本身,这里前面调用了self参数,括号里就不用写了
        # self.print_str(self) 传了两遍参数会报错

    def print_a_str(self):
        a.__init__(self)
        a.print_str(self)

    def print_b_str(self):
        b.__init__(self)
        b.print_str(self)

c = c()
c.print_str()  # 运用子类c类的初始定义
c.print_self_str()  # 运用子类c类的初始定义
c.print_a_str()  # 运用a类的初始定义
c.print_b_str()  # 运用b类的初始定义
c.print_str()  # 运用b类的初始定义
c.print_self_str()  # 运用子类c类的初始定义
# 前后两个print_str()输出值不一样,因为该函数没有重新初始化self.str

# __mro__查看继承顺序
print(c.__mro__)  
# (<class '__main__.c'>, <class '__main__.a'>, <class '__main__.b'>, <class 'object'>)

五、多层继承

eg:c类继承b类,b类继承a类,像这种三代及以上的叫多层继承。规则同继承

六、super调用父类方法

使用super()可以自动查找父类。调用顺序遵循__mro__类属性的顺序。比较适合单继承使用。

class a(object):
    def __init__(self):
        self.str='a类的初始定义'
    def print_str(self):
        print(f'运用{self.str}')

class b(a):
    def __init__(self):
        self.str = 'b类的初始定义'

    def print_str(self):
        # 1、 super()带参数
        # super(b, self).__init__()
        # super(b, self).print_str()
        # 2、 super()无参数
        super().__init__()
        super().print_str()

class c(b):
    def __init__(self):
        self.str= 'c类的初始定义'

    def print_str(self):
        # 1、 super()带参数
        # super(c,self).__init__()
        # super(c,self).print_str()
        # 2、 super()无参数
        super().__init__()
        super().print_str()

c = c()
c.print_str()  # 运用a类的初始定义

七、私有权限

  • 不能继承给子类的属性和方法需要添加私有权限
  • 私有权限不能在外部直接输出或使用
  • 语法:私有属性和方法区别在名字前面加两个下划线
class 类名():
    #私有属性
    __属性名 = 值
   # 私有方法
    def  __函数名(self):
       代码

 

如对本文有疑问,请在下面进行留言讨论,广大热心网友会与你互动!! 点击进行留言回复

相关文章:

验证码:
移动技术网