微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

python基础:面向对象-继承

这里写目录标题


在Python中,所有类认继承object类,object类是顶级类或基类;其他子类叫做派生类。

一、单继承

单继承意思就是一个类同时继承了一个父类

class Master(object):
    def __init__(self):
        self.kongfu='古法鸡蛋灌饼'

    def cook(self):
        print(f'运用{self.kongfu}做饼。')
        
#Student继承了Master类
class Student(Master):
	pass

lihua = Student()
lihua.cook()
#运用古法鸡蛋灌饼做饼。

二、多继承

多继承意思就是一个类同时继承了多个父类

class Master(object):
    def __init__(self):
        self.kongfu='古法鸡蛋灌饼'

    def cook(self):
        print(f'运用{self.kongfu}做饼。')
        
class School(object):
    def __init__(self):
        self.kongfu='正宗鸡蛋灌饼'

    def cook(self):
        print(f'运用{self.kongfu}做饼。')
        
#Student继承了Master类
class Student(School,Master):
	pass

lihua = Student()
lihua.cook()
#运用正宗鸡蛋灌饼做饼。

一个类有多个⽗类的时候,认使用第一个⽗类的同名属性和⽅法。

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

class Master(object):
    def __init__(self):
        self.kongfu='古法鸡蛋灌饼'

    def cook(self):
        print(f'运用{self.kongfu}做饼。')
        
#Student继承了Master类
class Student(Master):
	def __init__(self):
        self.kongfu='创新鸡蛋灌饼'

    def cook(self):
        print(f'运用{self.kongfu}做饼。')

lihua = Student()
lihua.cook()
#运用创新鸡蛋灌饼做饼。

⼦类和父类具有同名属性方法认使⽤子类的同名属性方法

四、多层继承

class Master(object):
    def __init__(self):
        self.kongfu='古法鸡蛋灌饼'
    def cook(self):
        print(f'运用{self.kongfu}做饼。')

class School(Master):#继承Master
    def __init__(self):
        self.kongfu='正宗鸡蛋灌饼'
    def cook(self):
        print(f'运用{self.kongfu}做饼')

class Student(School):#继承School
    def __init__(self):
        self.kongfu='创新鸡蛋灌饼'
    def cook(self):
        print(f'运用{self.kongfu}做饼')

#打印出继承顺序
print(Student.__mro__)
#(<class '__main__.Student'>, <class '__main__.School'>, <class '__main__.Master'>, <class 'object'>)

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

两种方法super()父类.初始化/再调用

class Master(object):
    def __init__(self):
        self.kongfu='古法鸡蛋灌饼'
    def cook(self):
        print(f'运用{self.kongfu}做饼。')

class School(Master):
    def __init__(self):
        self.kongfu='正宗鸡蛋灌饼'
    def cook(self):
        print(f'运用{self.kongfu}做饼')
    def make_master_cook(self):
        super().__init__()
        super().cook()

class Student(School):
    def __init__(self):
        self.kongfu='创新鸡蛋灌饼'
    def cook(self):
        print(f'运用{self.kongfu}做饼')
    def make_school_cook(self):#调用 父类
        super().__init__()
        super().cook()
    #调用 古法鸡蛋灌饼
    def make_master_cook(self):#调用父类
        #方法super().make_master_cook()
        #方法二
        Master.__init__(self)
        Master.cook(self)


lihua = Student()
lihua.make_school_cook()#调用 父类
lihua.make_master_cook()#调用父类

打印结果:

在这里插入图片描述

六、私有权限

1.定义私有属性方法

属性方法前面加上 ‘__’(两条下划线)即可。

class Master(object):
    def __init__(self):
        self.kongfu='古法鸡蛋灌饼'
        #私有属性
		self.__money = 4000
    def cook(self):
        print(f'运用{self.kongfu}做饼。')
    #私有方法
    def __make_money(self):
    	print(self.__money)   
#Student继承了Master类
class Student(Master):
	pass

lihua = Student()
print(lihua.__money)#报错
lihua.__make_money()#报错

2.获取修改私有属性

利用实例方法 get_XX 来获取,用 set_XX 来修改

class Master(object):
    def __init__(self):
        self.kongfu='古法鸡蛋灌饼'
        #私有属性
		self.__money = 4000
    def cook(self):
        print(f'运用{self.kongfu}做饼。')
    #获取私有属性值
    def get_money(self):
    	return self.__money
    #修改私有属性值
    def set_money(self,new_money):
    	self.__money=new_money
    	
#Student继承了Master类
class Student(Master):
	pass

lihua = Student()
print(lihua.get_money())#4000
lihua.set_money(100)
print(lihua.get_money())#100

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐