假设我们有3个类,其中grandparent
继承parent
自和继承自。我想在课堂上打电话给。我该怎么做?child
parent
grandparent
child
parent
__str__
grandparent
child
class grandparent:
def __init__(self):
pass
def __str__(self):
return f'grandparent'
class parent(grandparent):
def __init__(self):
pass
def __str__(self):
return f'{super().__str__()},parent'
class child(parent):
def __init__(self):
pass
def __str__(self):
return f'{super().__str__()},child'
在这种情况下,如果我从child
类中创建一个对象,打印后我会看到:
c = child()
print(c) # prints 'grandparent,parent,child'
我想 通过给孩子班的'grandparent,child'
祖父母打电话来看看。__str__
您始终可以直接调用该方法:
按要求输出。
有多种方法可以实现这一目标。
首先是将
parent
类传递给super
方法:在这种情况下,我们不需要知道“祖父母”类名称。如果您知道“ grantparent ”类的名称,我们可以使用直接类名:
这两种方法是最佳实践,任何其他方法都不那么灵活。
这很老套但是
这使用
mro
(方法解析顺序)来获取倒数第二个父类(最后一个始终是对象)如果你想获得当前的班级
但如果您使用多重继承,这会崩溃
您需要更改子类的str方法以返回您的预期结果。
如果您致电:
然后它会打印:祖父母,孩子