Проверьте, является ли self экземпляром подкласса в python - PullRequest
0 голосов
/ 01 ноября 2018

У меня есть класс с именем A, с двумя подклассами B и C. Имеет ли смысл следующее? Или есть лучший способ?

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 голосов
/ 01 ноября 2018

Есть лучший способ сделать это: переопределить 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 и C нигде не упоминаются в теле A. Это облегчает добавление дополнительных подклассов, если это когда-либо понадобится.

...