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

相关文章

功能概要:(目前已实现功能)公共展示部分:1.网站首页展示...
大体上把Python中的数据类型分为如下几类: Number(数字) ...
开发之前第一步,就是构造整个的项目结构。这就好比作一幅画...
源码编译方式安装Apache首先下载Apache源码压缩包,地址为ht...
前面说完了此项目的创建及数据模型设计的过程。如果未看过,...
python中常用的写爬虫的库有urllib2、requests,对于大多数比...