backtrader_源码学习_findbases函数用于发现两个类之间有多少继承的类

简介: backtrader_源码学习_findbases函数用于发现两个类之间有多少继承的类
# 从当前类出发到top类,中间有多少继承的类
def findbases(kls, topclass):
    retval = list()
    for base in kls.__bases__:
        if issubclass(base, topclass):
            retval.extend(findbases(base, topclass))
            retval.append(base)
    # return list(set(retval)) # 觉得用set去除重复可能比较好
    return retval

测试代码:

class People(object):
    def __init__(self):
        self.head_number=1
        self.hand_number=2
        self.foot_number=2
        self.eye_number=2
        self.nose_number=1
    def get_head_numer(self):
        return self.head_numer
    def get_hand_number(self):
        return self.hand_number
    def get_foot_number(self):
        return self.foot_number
    def get_eye_number(self):
        return self.eye_number
    def get_nose_number(self):
        return self.nose_number 
    def can_act(self):
        print("people can eat")
        print("people can smile")
        print("people can speak")
class Teacher(People):
    def __init__(self):
        super(Teacher,self).__init__()
    def can_act(self):
        print("teacher can teach")
class Student(People):
    def __init__(self):
        super(Student,self).__init__()
    def can_act(self):
        print("sudent is learning****")
class Son(Student):
    def __init__(self):
        super(Son,self).__init__()
    def can_act(self):
        print(" son can learn from parents")
class GrandSon(Son,Student,Teacher):
    def __init__(self):
        super(GrandSon,self).__init__()
    def can_act(self):
        print(" GrandSon can learn from parents")

findbases(GrandSon,People)

目录
相关文章
|
5月前
|
Java 编译器 数据处理
JavaSE——面相对象高级一(4/4)-继承相关的注意事项:权限修饰符、单继承、Object类、方法重写、子类访问成员的特点......
JavaSE——面相对象高级一(4/4)-继承相关的注意事项:权限修饰符、单继承、Object类、方法重写、子类访问成员的特点......
57 0
|
6月前
|
编译器 C语言 C++
【c++】类和对象 - 类的引入和定义
【c++】类和对象 - 类的引入和定义
【c++】类和对象 - 类的引入和定义
【JavaSE专栏65】内部类的使用,定义在其他类内部的类
【JavaSE专栏65】内部类的使用,定义在其他类内部的类
2.【类的组合(在一个类中定义一个类)】
2.【类的组合(在一个类中定义一个类)】
48 0
|
存储 SQL Java
《JavaSE-第七章》之抽象的类-实例的对象-合理的封装
《JavaSE-第七章》之抽象的类-实例的对象-合理的封装
C++类的学习1(二)
的定义一般包括两部分,一是类的属性,二是他所拥有的方法。类的实例化是指给类的加载并初始化过程,比如一个people类,我们具体到每一个人就是类的实例化,此外一个类可以在此类上进行扩展。比如people类,我们分为 外国people 和 中国people,那么people叫做基类,外国people叫做派生类或子类
101 0
|
Java
java学习第十三天笔记-面向对象249-继承中成员方法和成员变量的特点-利用方法的重写去设计继承结构
java学习第十三天笔记-面向对象249-继承中成员方法和成员变量的特点-利用方法的重写去设计继承结构
86 0
java学习第十三天笔记-面向对象249-继承中成员方法和成员变量的特点-利用方法的重写去设计继承结构
第五周学习java 继承 在子类父类中有相同参数,子类继承分类后如何进行调用,判断创建的对象属性哪个类
第五周学习java 继承 在子类父类中有相同参数,子类继承分类后如何进行调用,判断创建的对象属性哪个类
第五周学习java 继承 在子类父类中有相同参数,子类继承分类后如何进行调用,判断创建的对象属性哪个类
|
安全 C# 索引
C#编程基础——类
C#编程基础——类
116 0
C#编程基础——类