编程语言
首页 > 编程语言> > python基础:面向对象-继承。

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

标签:__,kongfu,python,继承,面向对象,Master,cook,self,def
来源: https://blog.csdn.net/weixin_45275802/article/details/116541906