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)

目录
相关文章
|
8月前
|
存储 算法 API
【Qt 基本类】QDateTime类在C++中的应用与深度解析
【Qt 基本类】QDateTime类在C++中的应用与深度解析
334 0
|
3月前
|
安全 编译器 C++
【C++篇】C++类与对象深度解析(三):类的默认成员函数详解
【C++篇】C++类与对象深度解析(三):类的默认成员函数详解
33 3
|
5月前
|
编译器 C语言 C++
类和对象 | 类的引入、struct&class的区别、类的定义
类和对象 | 类的引入、struct&class的区别、类的定义
39 7
|
8月前
|
编译器 C语言 C++
【C++专栏】C++入门 | 类和对象 | 类的引入、struct&class的区别、类的定义
【C++专栏】C++入门 | 类和对象 | 类的引入、struct&class的区别、类的定义
52 0
|
8月前
|
编译器 C语言 C++
【c++】类和对象 - 类的引入和定义
【c++】类和对象 - 类的引入和定义
【c++】类和对象 - 类的引入和定义
|
8月前
|
Java
Java面向对象编程,如何定义一个接口并在类中实现它?
Java面向对象编程,如何定义一个接口并在类中实现它?
136 1
【JavaSE专栏65】内部类的使用,定义在其他类内部的类
【JavaSE专栏65】内部类的使用,定义在其他类内部的类
|
存储 SQL Java
《JavaSE-第七章》之抽象的类-实例的对象-合理的封装
《JavaSE-第七章》之抽象的类-实例的对象-合理的封装
108 0
C++类的学习1(一)
的定义一般包括两部分,一是类的属性,二是他所拥有的方法。类的实例化是指给类的加载并初始化过程,比如一个people类,我们具体到每一个人就是类的实例化,此外一个类可以在此类上进行扩展。比如people类,我们分为 外国people 和 中国people,那么people叫做基类,外国people叫做派生类或子类
C++类的学习1(二)
的定义一般包括两部分,一是类的属性,二是他所拥有的方法。类的实例化是指给类的加载并初始化过程,比如一个people类,我们具体到每一个人就是类的实例化,此外一个类可以在此类上进行扩展。比如people类,我们分为 外国people 和 中国people,那么people叫做基类,外国people叫做派生类或子类
109 0

热门文章

最新文章