多个数据属性经过一个类实例化的对象作关联算法
# -*- 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属性
森林里边 猴子是很是厉害的 很是的灵活
父类规定子类必需要使用的类方法,方便程序归一化设计测试
接口继承示例this
# -*- 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的类若是继承了多个类,那么寻找方法有两种:深度优先和广度优先rest
对于定义的每个类,Python计算出一个方法解析顺序(MRO)列表,MRO列表就是全部基类的线性顺序列表。MRO列表的构造是经过一个C3线性化算法来实现的。code
子类会先于父类被检查对象
多个父类会根据它们在列表中的顺序被检查继承
若是对下一个类存在两个合法的选择,则选择第一个父类接口
继承顺序结果示例
# -*- 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__)
(<class '__main__.D'>, <class '__main__.B'>, <class '__main__.C'>, <class '__main__.A'>, <class 'object'>)
普通调用
# -*- 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()
猴子在森林~ 猴子在森林里边跳舞~