python面向对象继承权限_Python基础-面向对象组合、继承、子类调父类

本文探讨了Python中类的继承、组合与多继承的应用,包括单一继承、多重继承,以及接口继承和MRO顺序。实例化Forest类结合Animal和Plant,并展示了如何通过super()调用父类方法和抽象基类的使用。
摘要由CSDN通过智能技术生成

组合

多个数据属性通过一个类实例化的对象做关联

# -*- coding:utf8 -*-

class Forest: #定义总类结合-森林

def __init__(self,other): #定义类的属性

self.other = other #总类中的类别

self.addr = Animal() #把其它类别结合到总类中

self.type = Plant()

class Animal: #定义的动物类

def _animal(self): #定义的动物属性

print("这是动物类别")

class Plant: #定义的植物类

def _plant(self): #定义的植物属性

print("这是植物类别")

P = Forest("测试") #总类实例化

print(P.other) #总类自定义类输出

P.addr._animal() #总类结合的其它类输出

测试

这是动物类别

继承

通过集成可以派生(衍生)出新的方法

单继承

# -*- coding:utf8 -*-

class Forest: #定义的父类

def __init__(self,name):

self.Name = name

def action(self):

print("%s是非常厉害的" %self.Name)

class Subclass(Forest): #子类,(衍生)出新的类

print("森林里边")

P = Subclass("猴子") #实例化子类

P.action() #子类调用父类属性

森林里边

猴子是非常厉害的

多继承

# -*- coding:utf8 -*-

class Forest: #定义的父类1

def __init__(self,name):

self.Name = name

def action1(self):

print("%s是非常厉害的" %self.Name)

class Activity: #定义的父类2

def __init__(self,obj):

self.Obj = obj

@staticmethod

def action2(describe):

print("非常的%s" %describe)

class Subclass(Forest,Activity): #子类,(衍生)出新的类

print("森林里边")

P = Subclass("猴子") #实例化子类

P.action1() #调用父类1属性

P.action2("灵活") #调用父类2属性

森林里边

猴子是非常厉害的

非常的灵活

接口继承

父类规定子类必须要使用的类方法,方便程序归一化设计

接口继承示例

# -*- coding:utf8 -*-

import abc

class All_file(metaclass=abc.ABCMeta): #父类定义的方法,限定子类使用方法

@abc.abstractmethod

def a(self): #限制子类方法1

pass

@abc.abstractmethod

def b(self): #限制子类方法2

pass

class new(All_file): #子类继承的方法使用,必须要实现父类方法,否则无法实例化

def a(self):

print("继承的类方法1")

def b(self):

print("继承的类方法2")

P = new()

P.a()

P.b()

继承的类方法1

继承的类方法2

继承顺序

特性

Python的类可以继承多个类,Java和C#中则只能继承一个类

Python的类如果继承了多个类,那么寻找方法有两种:深度优先和广度优先

剖析

对于定义的每一个类,Python计算出一个方法解析顺序(MRO)列表,MRO列表就是所有基类的线性顺序列表。MRO列表的构造是通过一个C3线性化算法来实现的。

MRO列表准则

子类会先于父类被检查

多个父类会根据它们在列表中的顺序被检查

如果对下一个类存在两个合法的选择,则选择第一个父类

示例

继承顺序结果示例

# -*- coding:utf8 -*-

class A:

def test(self):

print("this is A")

class B(A):

def test(self):

print("this is B")

class C(A):

def test(self):

print("this is C")

class D(B,C):

def test(self):

print("this is E")

print(D.__mro__)

(, , , , )

子类调用父类

普通调用

# -*- coding:utf8 -*-

class A:

def __init__(self,name,forest):

self.name = name

self.forest = forest

def Brief (self):

print("%s在%s~" %(self.name,self.forest))

class B(A): #父类属性继承

def __init__(self,name,forest,action): #派生新的方法

A.__init__(self,name,forest) #父类属性快捷引用

self.action = action

def Events(self):

B.Brief(self)

print("%s在%s里边%s~" % (self.name, self.forest,self.action))

P = B("猴子","森林","跳舞")

P.Events()

猴子在森林~

猴子在森林里边跳舞~

super()函数方法调用

#-*- coding:utf8 -*-

class A:

def __init__(self,name,forest):

self.name = name

self.forest = forest

def Brief (self):

print("%s在%s~" %(self.name,self.forest))

class B(A): #父类属性继承

def __init__(self,name,forest,action): #派生新的方法

super().__init__(name,forest) #Python3调用父类属性方法

# super(B,self).__init__(name,forest) #Python2调用父类属性方法

self.action = action

def Events(self):

B.Brief(self)

print("%s在%s里边%s~" % (self.name, self.forest,self.action))

P = B("猴子","森林","跳舞")

P.Events()

猴子在森林~

猴子在森林里边跳舞~

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值