检查self是否是python中子类的实例

时间:2018-11-01 15:54:04

标签: python self isinstance

我有一个名为A的类,具有两个子类BC。以下内容有意义吗?还是有更好的方法呢?

class A():
    ...

    def do_stuff(self):
        self.do_this()
        self.do_that()
        if isInstance(self, B):
            self.do_the_b_stuff()
        elif isInstance(self, C):
            self.do_the_c_stuff()

1 个答案:

答案 0 :(得分:6)

还有一种更好的方法:在子类中覆盖do_stuff

class A:
    def do_stuff(self):
        self.do_this()
        self.do_that()

class B(A):
    def do_stuff(self):
        super().do_stuff()  # call the parent implementation
        self.do_the_b_stuff()

class C(A):
    def do_stuff(self):
        super().do_stuff()  # call the parent implementation
        self.do_the_c_stuff()

此解决方案的优点是基类不必了解其子类-B主体中的任何地方都没有引用CA。如有必要,这使得添加其他子类变得更加容易。