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)

目录
相关文章
|
17天前
|
Java
java面向对象高级分层实例_测试类(main方法所在的类)
java面向对象高级分层实例_测试类(main方法所在的类)
12 1
|
17天前
|
编译器 C语言 C++
【c++】类和对象 - 类的引入和定义
【c++】类和对象 - 类的引入和定义
【c++】类和对象 - 类的引入和定义
|
17天前
|
Java
Java面向对象编程,如何定义一个接口并在类中实现它?
Java面向对象编程,如何定义一个接口并在类中实现它?
52 1
|
10月前
|
存储 SQL Java
《JavaSE-第七章》之抽象的类-实例的对象-合理的封装
《JavaSE-第七章》之抽象的类-实例的对象-合理的封装
|
11月前
|
C# 索引
C#中接口和类有什么异同
C#中接口和类有什么异同
|
11月前
|
索引
接口和类有什么异同
接口和类有什么异同
|
12月前
|
C++
C++类的学习1(二)
的定义一般包括两部分,一是类的属性,二是他所拥有的方法。类的实例化是指给类的加载并初始化过程,比如一个people类,我们具体到每一个人就是类的实例化,此外一个类可以在此类上进行扩展。比如people类,我们分为 外国people 和 中国people,那么people叫做基类,外国people叫做派生类或子类
|
12月前
|
C++
C++类的学习1(一)
的定义一般包括两部分,一是类的属性,二是他所拥有的方法。类的实例化是指给类的加载并初始化过程,比如一个people类,我们具体到每一个人就是类的实例化,此外一个类可以在此类上进行扩展。比如people类,我们分为 外国people 和 中国people,那么people叫做基类,外国people叫做派生类或子类
第五周学习java 继承 在子类父类中有相同参数,子类继承分类后如何进行调用,判断创建的对象属性哪个类
第五周学习java 继承 在子类父类中有相同参数,子类继承分类后如何进行调用,判断创建的对象属性哪个类
第五周学习java 继承 在子类父类中有相同参数,子类继承分类后如何进行调用,判断创建的对象属性哪个类