use*_*514 1 python recursion inheritance isinstance
我有几节课
class Parent():
def DoThing():
if isinstance(self, 'child1'):
DoSomething()
elif:
DoSomethingElse()
import Parent
class Child1(Parent):
def DoThing():
#Do some things here
super.DoThing()
import Parent
class Child2(Parent)
def DoThing():
#Do other things
super.DoThing()
Run Code Online (Sandbox Code Playgroud)
我遇到的问题是我想检查该类的实例是父级本身还是子级之一。
失败点是在解释 Parent 时,该过程失败,因为解释器不知道 Child1 是什么。我无法导入 Child1,因为这会导致递归。
我通过在parent和child1中定义一个方法来解决这个问题。
def IsChild1Instance(self):
return True/False
Run Code Online (Sandbox Code Playgroud)
有没有更好、更干净的方法来做到这一点?
你的父类不应该关心子类。使用方法的不同实现来代替:
class Parent:
def do_thing(self):
self.do_something_delegated()
def do_something_delegated(self):
pass
class Child1(Parent):
def do_something_delegated(self):
# do child1 specific things
class Child2(Parent)
def do_something_delegated(self):
# do child2 specific things
Run Code Online (Sandbox Code Playgroud)